我有一个节点应用程序,其中有一个页面发布他们的电子邮件地址以登录到应用程序(我现在没有做任何事情,只是存储电子邮件地址)。当我将应用程序推向生产时,它可以正常运行一段时间,然后我开始收到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)
如果我在没有任何代码更改的情况下重新启动应用程序,登录将重新开始我猜测与csrf有关的事情已经过时了。我肯定在登录页面上传递了一个csrf令牌。当我查看视图源时,我可以看到它。
我在节点0.10,我想知道我是否应该回到0.8。
这是我的配置:
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());
});
答案 0 :(得分:1)
我做了两件事,看起来他们解决了这个问题。
我猜这个问题与#2有关。
我不知道这与我得到的csrf错误有什么关系。