【问题标题】:Rest-auth still reports the error of "CSRF cookie not set", but I've set the csrfrest-auth 还是报“CSRF cookie not set”的错误,但是我已经设置了csrf
【发布时间】:2017-06-25 05:48:51
【问题描述】:

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

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

但是当我尝试发布 rest-auth url 时,它给了我错误:

但是,在 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 令牌:

你能帮我找出错误在哪里吗?

【问题讨论】:

    标签: node.js django rest cookies


    【解决方案1】:

    您请求中的令牌当前名为_csrf。需要调用csrfmiddlewaretoken 才能让 Django 接收它。

    【讨论】:

    • 非常感谢您的建议。我认为这是正确的方向。我添加了 csrfmiddlewaretoken,它可以部分工作。
    • 部分?怎么样?
    • 我在这篇文章中提供了详细信息。我根据这个答案编写了我的代码stackoverflow.com/questions/33060044/…
    • 如果我已修复 CSRF cookie not set 错误,请接受我的回答并提出另一个问题。
    • 我在这里新建了一个帖子,有时间欢迎回复我。谢谢stackoverflow.com/questions/42101642/…
    【解决方案2】:

    感谢拉斐尔·戈麦斯。我在这方面取得了一些进展。 我将 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();
    });
    

    在 Fiddler 中,

    我可以在那里看到 2 个 csrf,一个是默认的,一个是我设置的。我试图删除 app.use(csrf({ cookie: true }));但随后它显示 csrf 配置错误。无论如何,至少 csrfmiddlewaretoken 是这样工作的。

    那么认证结果是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2013-05-12
      • 2017-05-05
      • 2022-01-12
      • 2021-01-30
      • 1970-01-01
      • 2017-12-06
      • 2021-02-08
      相关资源
      最近更新 更多