gpt4 book ai didi

Node.js 有条件地使用 csurf 和 express 4

转载 作者:搜寻专家 更新时间:2023-10-31 22:31:40 24 4
gpt4 key购买 nike

我尝试在我的 express 应用程序中仅在几条路线上使用 csurf。这就是方法:

var express       = require('express');
var session = require('express-session');
var csrf = require('csurf');

// some more stuff

var csrfExclusion = ['/myApi','/unsecure'];

var app = express();

var conditionalCSRF = function (req, res, next) {
if (csrfExclusion.indexOf(req.path) !== -1){
next();
}
else{
csrf();
}
});

app.use(conditionalCSRF);

甚至尝试过:

var conditionalCSRF = function (req, res, next) {  
if (csrfExclusion.indexOf(req.path) !== -1){
next();
}
else{
csrf(req, res, next);
next();
}
});

var conditionalCSRF = function (req, res, next) {  
if (csrfExclusion.indexOf(req.path) !== -1){
next();
}
else{
csrf();
next();
}
});

但这给了我一个错误:Object # has no method 'csrfToken'

如何有条件地使用 csurf。该文档仅提供在 express 应用程序中的所有路线上使用它的信息

app.use(csrf());

但这不是我想要的,我想排除一些路由...

亲切的...马丁

更新:

终于成功了。我做了以下事情:

app.use(function(req, res, next){
if (csrfExclusion.indexOf(req.path) !== -1) {
next();
}
else {
csrf()(req, res, next);
});

这有条件地添加了 csrf 中间件。但我真的觉得这样调用它有点奇怪:

csrf()(req, res, next);

我什至不明白语法...

最佳答案

根据 this您需要将它分成两个路由器,一个使用 csurf,一个不使用。然后,您会将中间件而不是应用程序应用到路由器。

var routes = express.Router();
var csrfExcludedRoutes = express.Router();

routes.use(csrf());

routes.get('/', function(req, res) {
//has req.csrfToken()
});

csrfExcludedRoutes.get('/myApi', function(req, res) {
//doesn't have req.csrfToken()
});

关于Node.js 有条件地使用 csurf 和 express 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24992139/

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