【发布时间】: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