首页 > 解决方案 > node.js csurf 在第一次请求时也是无效的 csrf 令牌

问题描述

我有这种行为,对于我的页面所做的第一个请求,我也会收到 EBADCSRFTOKEN 错误。

据我了解,在第一次请求时,服务器应该只生成 CSRF 令牌,而不是与它获得的令牌进行比较,因为在第一次请求时,客户端还没有令牌。

我只使用 REST API(不渲染任何视图),所以在第一个请求中,我在正文中返回 req.csrfToken()。

我的代码:

const app = express();

app.use(express.static(path.join(__dirname, 'public')));

app.use(function (req, res, next) {
    // check origin...
    ....
    ....
    next();
});

app.use(bodyParser.json({limit: '140kb'}));
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());

const csrfProtection = csrf({cookie: true}, ignoreMethods: ['HEAD', 'OPTIONS']});
app.use(csrfProtection);

app.use("/app-manager/", routes);

我在上面提到过,在第一个请求中,我在正文中返回 req.csrfToken(),客户端应该在下一个请求中将其发回。

标签: node.jsexpresscsrfcsrf-token

解决方案


推荐阅读