gpt4 book ai didi

node.js - 重定向时 Express 上未设置 Csrf token

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:35 27 4
gpt4 key购买 nike

我将 csrf 中间件与 Express 框架结合使用。我的登录页面是这样的:

app.get('/', getUserOrLogin, function (req, res) {
// do something...
});

getUserOrLogin 的位置:

// Return the user otherwise redirect to login page
var getUserOrLogin = function (req, res, next) {
var user = req.session.user;

if (user == null) {
req.session.backTo = req.originalUrl;
res.redirect('/login');
} else {
req.user = user;
next();
}
};

当我尝试访问 / 时,它会将我正确重定向到 /login,但 cookie 中的 csrf token 未设置。

我的 getUserOrLogin 函数是否有问题或者是 Express 错误?

最佳答案

我发现了错误。由于我不想在每个页面上进行 csrf 控制,因此我使用了条件函数:

// Disable CSRF for some requests
var conditionalCSRF = function (req, res, next) {
var whitelist = ['/inbound'];

if (req.method !== 'POST') {
next();
return;
}
if (whitelist.indexOf(req.url) !== -1) {
next();
} else {
(express.csrf())(req, res, next);
}
};

app.use(conditionalCSRF);

但该函数不会设置 csrf token ,直到用户需要需要它的页面。所以我就这样修改了

var connect = require('connect');

// Disable CSRF for some requests
var conditionalCSRF = function (req, res, next) {
var whitelist = ['/inbound'];

req.session._csrf || (req.session._csrf = connect.utils.uid(24));

if (req.method !== 'POST') {
next();
return;
}
if (whitelist.indexOf(req.url) !== -1) {
next();
} else {
(express.csrf())(req, res, next);
}
};

app.use(conditionalCSRF);

关于node.js - 重定向时 Express 上未设置 Csrf token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com