在我的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 的代码,可以发现除非在声明身份验证中间件时在 options 字典中指定 assignProperty,否则它不会在请求中存储用户数据。它试图访问相同的属性来调用 isAuthenticated(),所以因为它从未存储这些数据,它总是声称我没有经过身份验证。
不幸的是,指定此密钥会影响 Express 的路由匹配,导致处理回调 URL 时出现 404 错误,因为检查 assignProperty 的代码立即转到处理下一个可用路由。
我已将完整的代码添加到 pastie 中,链接为pastie。如果有人能提供帮助,我将不胜感激。