由于某种原因,在我的 NodeJS Express 应用程序上,当通过 PassportJS 库与 Facebook 进行身份验证时,无论身份验证是否成功并返回配置文件数据,都会调用request.isAuthenticated()
总是回来false
.
我已经声明了我的身份验证回调以在成功时重定向到/profile
路线,它成功地完成了:
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/profile', failureRedirect: '/' }));
该路由使用一个函数声明,该函数在决定是否继续处理请求之前验证身份验证:
app.get('/profile', ensureAuthenticated, user.list);
该函数的定义如下:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
return res.redirect('/')
}
如您所见,一切都相当简单。我在这里并没有做任何特别的事情。
单步调试 PassportJS 的代码发现,除非您指定,否则它不会在请求中存储用户数据assignProperty
在声明身份验证中间件时的选项字典中。它与调用时尝试访问的属性相同isAuthenticated()
,所以因为它从不存储这些数据,所以它总是声称我没有经过身份验证。
不幸的是,指定这个键会破坏 Express 的路由匹配,这会导致处理回调 URL 时出现 404 错误,因为检查代码assignProperty
立即开始处理下一条可用路线。
我已将完整代码添加到pastie。我将不胜感激任何人能就此提供的任何帮助。