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)