从expressjs端点向Django发送发布请求

时间:2019-05-11 22:15:55

标签: django express axios csrf

我正在尝试实施以下工作流程。

  • 填充html表单
  • 提交
  • 正在接收请求的端点(expressjs)进行一些处理,并将带有req.body的请求发送到另一个后端(django)
  • Django返回对expressjs的响应

问题是我被困在csrf级别,更具体地说是遇到此错误:

invalid csrf token
403
ForbiddenError: invalid csrf token

这是我用于请求的代码:

router.post('/registration', function (req, res, next) {

        axios.post('http://localhost:8000/register_extended/', JSON.stringify(req.body), {
            'Content-Type': 'application/json'
        }).then(() => {
            console.log('success')
        }).catch(() => {
            console.log('failure')
        })

        res.send('respond with a resource');
    });
});

这是我的中间件

app.use(bodyParser.urlencoded({ extended: true }));
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(csrfMiddleware);

如何为我的需求提供有效的csrf令牌? Axios应该自己处理,这就是我选择它的原因。

1 个答案:

答案 0 :(得分:0)

Django 使用 CSRF 令牌来防止来自不受信任域的 CSRF 攻击。您可以将运行 express 的站点或 IP 列入白名单,以便在没有 CSRF 令牌的情况下发出发布请求。将此添加到您的 Django 'settings.py':

CSRF_TRUSTED_ORIGINS = [
    "yoursite.runningexpress.here.com"
]