我正在尝试使用Express为我的Nodejs应用添加csrf保护。 当我添加这个midlleware时:
app.use(function (req, res, next) {
res.locals.csrftoken = req.csrfToken();
});
我收到此错误:
500 TypeError: Object #<IncomingMessage> has no method 'csrfToken'
有人可以帮我解决这个问题。
这是我的app.js代码:
var express = require('express')
, routes = require('./routes')
, http = require('http')
, path = require('path');
var app = express();
app.configure(function () {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'the secret' }));
app.use(express.csrf());
app.use(function (req, res, next) {
res.locals.csrftoken = req.csrfToken();
});
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
答案 0 :(得分:0)
static
之外,CSRF和其他中间件不再与快递4.x捆绑在一起 - 我的假设是您使用4.x
如果您的快速版本是4.x,那么您需要手动安装csurf并使用该版本代替express.csrf()
查看有关中间件https://github.com/senchalabs/connect?#middleware的详细信息,并在此处更改说明http://expressjs.com/guide/using-middleware.html#middleware.built-in
稍后编辑:对于Express 3.x分支,您需要 3.4.0 的最低版本,因为csrfToken()
方法首次出现在express@3.4.0
中},connect
更新为2.9.0
时的包,这是提供connect
方法的第一个csrfToken
版本。