Node Express中的403错误

我有一个节点的应用程序,其中有一个页面,张贴他们的电子邮件地址login到应用程序(我没有做任何事情,但现在存储电子邮件地址)。 当我将应用程序推到生产中时,它可以正常工作一段时间,然后我开始得到这样的403错误:

Express 403 Error: Forbidden at Object.exports.error (/opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/utils.js:63:13) at createToken (/opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/middleware/csrf.js:82:55) at /opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/middleware/csrf.js:54:7 at Object.ondone (/opt/run/snapshot/package/node_modules/express/node_modules/connect/node_modules/uid2/index.js:46:8) 

这是我在日志中看到的:

 err Sun, 09 Mar 2014 11:52:01 GMT Error: Forbidden at Object.exports.error (/opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/utils.js:63:13) at createToken (/opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/middleware/csrf.js:82:55) at /opt/run/snapshot/package/node_modules/express/node_modules/connect/lib/middleware/csrf.js:54:7 at Object.ondone (/opt/run/snapshot/package/node_modules/express/node_modules/connect/node_modules/uid2/index.js:46:8) 

如果我没有任何代码更改重新启动应用程序,login开始再次工作。 我正在猜测与csrf有关的事情将会过时。 我肯定是在login页面上传递一个csrf标记。 当我查看源代码时,我可以看到它。

我在节点0.10,我想知道我是否应该回到0.8。

这是我的configuration:

 app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine','ejs'); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(helmet.xframe()); app.use(helmet.iexss()); app.use(helmet.contentTypeOptions()); app.use(helmet.cacheControl()); app.use(express.cookieParser()); app.use(express.session({ secret: "**********************", cookie: { maxAge : 3600000, //1 hours expires : new Date(Date.now() + 3600000), //2 Hours }, store: new MongoStore({ mongoose_connection: mongoose.connection }) }) ); //app.use(express.cookieSession({secret:"fooseball123!"})); app.use(express.csrf()); //middleware to make csrf token available app.use(function (req, res, next) { //res.locals.token = req.session._csrf; res.locals.token = req.csrfToken(); next(); }); app.use(express.compress()); app.use(app.router); app.use(express.static(__dirname + '/public', {maxAge: 86400000})); app.use(express.errorHandler()); }); 

我做了两件事情,看起来他们解决了这个问题。

  1. 我把我的节点版本回滚到0.8
  2. 我删除了express.session调用中的cookie参数。

我猜这个问题与#2有关。

我不知道这与我得到的csrf错误有什么关系。