我正在使用express@3.0.0beta4和passport@0.1.12并使用本地策略进行身份验证. 一切似乎都很好,它正确地重定向成功和失败 app.post('/login', passport.authenticate('local', { failureRedirect: '/' }),function(req,
一切似乎都很好,它正确地重定向成功和失败
app.post('/login', passport.authenticate('local', { failureRedirect: '/' }), function(req, res) { console.log(req.isAuthenticated()); // true res.redirect('/users/' + req.user.id ); });
但是,如果我在配置文件路由上添加ensureAuthenticated
app.get('/users/:id', ensureAuthenticated, routes.user); function ensureAuthenticated(req, res, next) { console.log(req.isAuthenticated()); // false if (req.isAuthenticated()) { return next(); } res.redirect('/'); }
登录后,它将我重定向回’/'(登录页面)而不是’/ users / id'(用户个人资料).问题是req.isAuthenticated()总是返回false,并且调试中没有req.user变量.
是快递3和护照互动有问题还是我做错了什么?
我也有类似的问题,但事实证明这是因为我使用快速会话而没有为会话数据指定数据存储.这意味着会话数据存储在RAM中,由于我使用的是多个工作者,因此工作人员之间不会共享会话存储.我重新配置了我的快速会话以使用RedisStore,并且isAuthenticated()开始按预期返回true.app.use express.session secret: '...' store: new RedisStore host: redisUrl.hostname port: redisUrl.port db: ... pass: ...