【发布时间】:2014-09-19 10:58:37
【问题描述】:
我尝试在我的 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。该文档仅提供了在快速应用程序中的所有路线上使用它的信息
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);
我什至不明白语法...
【问题讨论】:
-
感谢您分享您的发现,您也可以为此写一个单独的答案。无论如何,我想分享一下,目前有些情况似乎无法免除 csrf。未解决的问题:github.com/expressjs/csurf/issues/10#issuecomment-232501314