【问题标题】:NodeJS how to set csrf token correctly?NodeJS如何正确设置csrf令牌?
【发布时间】:2017-06-25 09:26:22
【问题描述】:

这是这个问题的延续:Rest-auth still reports the error of "CSRF cookie not set", but I've set the csrf

The code I used for server.js is:
const cookieParser = require('cookie-parser');
const csrf = require('csurf');
app.use(cookieParser());
app.use(csrf({ cookie: true }));
app.use(function (req, res, next) {
  res.cookie('csrfmiddlewaretoken', req.csrfToken());
  next();
});

但是,结果是

我认为原因是我没有正确设置cookie。我试图删除 app.use(csrf({ cookie: true }));,但随后它显示 csrf misconfigured 的错误。

在fiddler中,我可以看到cookie中有两个token,一个默认,一个由res.cookie('csrfmiddlewaretoken', req.csrfToken());设置,我该如何设置cookie 以正确的方式?

更新:

我想出了一种蛮力的方法来将 _csrf 的名称更改为 csrfmiddlewaretoken。

app.use(function (req, res, next) {
  res.cookie('csrfmiddlewaretoken', req.cookies._csrf);
  next();
})

然后,在提琴手中,我看到值是相同的。

但是 django rest-auth 仍然报告失败,例如:

也许这与名字无关。我还在研究中......

【问题讨论】:

  • 这和 django-rest-framework 有什么关系?
  • 我在这里使用了 django rest-auth 包,登录和注册使用 POST 到 url(r'^rest-auth/', include('rest_auth.urls')), url(r'^ rest-auth/registration/',包括('rest_auth.registration.urls'))。错误信息来自那里。你可以看看我之前的问题,stackoverflow.com/questions/42099083/…。有人帮我弄清楚django只能提取csrfmiddlewaretoken,而不是_csrf。
  • 我当前的问题是我的 cookie 中有 2 个 csrf 令牌(如上面的截图),_csrf 和 csrfmiddlewaretoken。 csrfmiddlewaretoken 值不正确,因此身份验证失败。我认为 _csrf 的值是正确的,但名称不正确。应该改为csrfmiddlewaretoken。

标签: node.js django authentication cookies csrf


【解决方案1】:

JiPanNYC,也许你忘了添加

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}

在你的 settings.py 中

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 2015-02-02
    • 2021-07-14
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2016-06-19
    • 2014-12-25
    • 2011-12-26
    相关资源
    最近更新 更多