Rest-auth仍然报告“未设置CSRF cookie”的错误,但我已经设置了csrf

时间:2017-02-07 20:13:29

标签: node.js django rest cookies

我尝试使用Django rest-auth软件包实现身份验证(登录/注册)功能。

url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),

但是当我试图发布rest-auth网址时,它给了我错误: screenshot from chrome console

但是,在Nodejs中我已经使用'csurf'包设置了csrf令牌,

const cookieParser = require('cookie-parser');
const csrf = require('csurf');
const app = new Express();
app.use(cookieParser());
app.use(csrf({ cookie: true }));

另外,我可以使用Fiddler看到csrf令牌: screenshot from fiddler

你能帮我弄清楚bug的位置吗?

2 个答案:

答案 0 :(得分:1)

您的请求中的令牌目前名为_csrf。需要将它调用csrfmiddlewaretoken以便Django选择它。

答案 1 :(得分:0)

感谢Raphael Gomes。我在这方面取得了一些进展。 我将server.js文件更改为:

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

我可以看到2个csrfs,一个默认,一个由我设置。我试图删除app.use(csrf({cookie:true}));但后来显示csrf错误配置。无论如何,至少csrfmiddlewaretoken以这种方式工作。

然后验证结果如下: enter image description here

enter image description here

它说这个csrf令牌无效。我想那是因为我使用了req.csrfToken()。我还在研究如何设置正确的csrf令牌。