NodeJS如何正确设置csrf令牌?

时间:2017-02-07 23:02:05

标签: node.js django authentication cookies csrf

这是此问题的延续: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();
});

然而,结果是 enter image description here

enter image description here

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

在小提琴手中,我可以看到cookie中有两个令牌,一个默认,一个由 res.cookie('csrfmiddlewaretoken',req.csrfToken())设置; ,如何设置cookie以正确的方式?

更新

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

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

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

enter image description here

但django rest-auth仍然报告失败: enter image description here

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

1 个答案:

答案 0 :(得分:2)

JiPanNYC,也许你忘了添加

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}
你在settings.py中的