我想在我的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.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);
我甚至不理解语法...