我尝试在我的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();
}
});
但这给了我一个错误:对象#没有方法'csrfToken'
我如何有条件地使用csurf。该文档仅提供在Express app中的所有路线上使用它的信息,
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);
我什至没有得到语法...
根据这一点,您需要将其分成两台路由器,一台使用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()
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句