passportjs无法validation快速会话

我正在使用passportjs来validation我的快速应用程序。 我所做的与教程代码非常相似,但validation会话总是让我烦恼。

在我的主要工作stream程中,我使用本地策略validation用户

passport.authenticate('local', function (err, user, info) { if (err) { req.flash('error', { msg: err.message }); return res.redirect('back'); } if (!user) { // punish abuser... }) .catch( function (err) { req.flash('error', { msg: err.message }); return res.redirect('back'); }); } else { // Log user in debug('Info: ' + 'Logging in'.green.bold); req.logIn(user, function (err) { if (err) { debug('Info: ' + 'Error occured '.red.bold); req.flash('error', { msg: err.message }); res.redirect('back'); } // req.session.passport.user = user.id; // <-- even tried hack, didn't work // Send user on their merry way res.redirect('/homepage'); }); } }) 

然后,所有要求/主页强制他们来validation用户是否通过身份validation

  app.all('/api*', passportConf.isAuthenticated); 

其中isAuthenticated()被定义为

 exports.isAuthenticated = function (req, res, next) { // Is the user authenticated? if (req.isAuthenticated()) { debug('Info: ' + '----authentication verified'); return next(); } else { debug('Info: ' + '----authentication verification failed'); // flash error message etc... return res.redirect('/login'); } }; 

结果显示:

 Info: --->> Password Matched! <<--- +0ms Info: Logging in +0ms Info: serializing user +0ms ... POST /login 302 295.015 ms - 64 ... Executing (default): UPDATE "Sessions" SET "data"='{"cookie":{"//cookie"},"passport":{"user":37}}' ... Info: ----authentication verification failed +0ms .... GET /api 302 19.094 ms - 68 Executing (default): UPDATE "Sessions" SET "data"='{"cookie":{"//cookie"},"passport":{}, "attemptedURL":"/api"} ... Info: de-serializing user +20ms ... Executing (default): SELECT "//fields" FROM "Users" AS "User" WHERE "User"."id" = 37 LIMIT 1; Error: 500 [object SequelizeInstance:User] +5ms 

请求一定经过密码检查,一直到redirect之前一直到redirect之前死亡。

我观察到3个潜在的原因:

  • 两个会话更新写入是相同的,除了第一个有user.id序列化后,redirect后,用户不见了。
  • 在请求被判处死刑后,反序列化用户和SELECT操作来查找用户。 我的代码可能会有一些sorting/asynchronous问题(我到处看,真的找不到任何东西..)
  • 500 [对象SequelizeInstance:用户]是一个真正的黑盒错误,我不知道这意味着什么..

卡住了很多晚上…任何帮助,这是非常感谢…

500 [object SequelizeInstance:User]似乎表明你正在传递一个sequelize实例到某个地方,认为这是一个错误。 也许你正在调用一个预期err, user的callbackerr, user只需要user

 fn(user) // Where it should have been fn(null, user)