【问题标题】:Send a post request from an expressjs endpoint to django从 expressjs 端点向 django 发送 post 请求
【发布时间】:2019-09-29 08:55:01
【问题描述】:

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

  • 填充 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应该是自己处理的,所以我选择了它。

【问题讨论】:

  • 似乎您不是从另一个后端向 django 后端发送请求,而是直接从客户端发送。您首先向“/registration”发送一个请求,当该请求成功时,您发送另一个请求,这一次我想是发送到 Django 后端,但仍然来自客户端。对吗?
  • 我不明白。 /registration 端点是提交时调用的操作。因此,当我进入 onsubmit 程序时,我会发出另一个请求作为该过程的一部分。当第二个请求返回时,我将返回给客户(这是计划)

标签: django express axios csrf


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 2020-10-28
    • 2021-11-17
    • 2020-09-30
    • 2019-09-08
    • 2020-05-11
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多