【问题标题】:Error: misconfigured csrf - Express.js错误:错误配置的 csrf - Express.js
【发布时间】:2017-07-20 18:51:50
【问题描述】:

当我尝试访问我的登录页面时,我收到了Error: misconfigured csrf。我正在将 csurf 实现到路由器,但我只是得到响应状态码 500。

实施:

let router = require("express").Router();

let PostLoginResource = require("./../resources/PostLoginResource");
let RateLimit = require("express-rate-limit");
let csrf = require("csurf");

let csrfProtection = csrf({ cookie: true });

router.route("/login")
    .get(csrfProtection, function(req, res) {
        // Do some stuff
    })

    .post(loginLimiter, function(req, res) {

        PostLoginResource(req, function(success, err) {
            // Do some stuff
        })

    });

在 app.js 中使用此模块之前,我正在启动 session-cookie:

// Parse the request body as JSON
app.use(bodyParser.json());

// Parse the URL encoded data
app.use(bodyParser.urlencoded({extended: true}));

// Set up session-cookie
app.use(session({
    secret: "secret",
    resave: false,
    saveUninitialized: true,
    cookie: {secure: true,
        httpOnly: true,
        maxAge: 1000 * 60 * 60 * 24
    }
}));

不过,这不起作用。谁知道问题出在哪里?

【问题讨论】:

  • 该路径是否正确:./../resources/PostLoginResource?
  • 是的,否则那将是错误消息,而不是 Error: misconfigured csrf
  • 你确实得到了 500,这意味着内部错误。不正确的语句导致它。你在哪里需要会话对象>

标签: javascript express csrf


【解决方案1】:
var cookieParser = require('cookie-parser')

解析cookies 我们需要这个,因为 "cookie" 在 csrfProtection 中是真的

app.use(cookieParser())

【讨论】:

  • note* 对 app.use(csrf()) 的调用必须在 app.use(cookieParser()) AND app.use(session({...}) 之后设置。
  • express session 中间件官方描述:github.com/expressjs/session '从1.5.0版本开始,该模块不再需要使用cookie-parser中间件。该模块现在直接在 req/res 上读取和写入 cookie。如果此模块和 cookie-parser 之间的 secret 不同,使用 cookie-parser 可能会导致问题。'
猜你喜欢
  • 2016-04-06
  • 2018-10-31
  • 1970-01-01
  • 2014-07-22
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多