lyp*_*ptt 3 javascript node.js passport.js
出于某种原因,在我的NodeJS Express应用程序上,当使用Facebook通过PassportJS库进行身份验证时,无论身份验证成功并返回配置文件数据,调用request.isAuthenticated()始终返回false.
我已经声明我的身份验证回调将成功重定向到/profile路由,它成功完成:
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/profile', failureRedirect: '/' }));
Run Code Online (Sandbox Code Playgroud)
使用在确定是否继续处理请求之前验证身份验证的函数声明此路由:
app.get('/profile', ensureAuthenticated, user.list);
该功能的定义如下:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
return res.redirect('/')
}
Run Code Online (Sandbox Code Playgroud)
你可以看到一切都很简单.我这里没有做任何特别特别的事.
逐步通过PassportJS的代码显示它不会在请求中存储用户数据,除非您assignProperty在声明身份验证中间件时指定选项dict中.这是它在调用时尝试访问的同一属性isAuthenticated(),因为它从不存储这些数据,它总是声称我没有经过身份验证.
不幸的是,指定此密钥会搞砸Express的路由匹配,这会导致404错误处理回调URL,因为检查的代码会assignProperty立即转移到处理下一个可用路由.
我已经将代码全部添加到了pastie中.我很感激任何人都能提供的任何帮助.
尝试移动cookieParser和session护照中间件之前中间件:
app.use(express.cookieParser());
app.use(express.session({ secret: '--- OMMITTED ---' }));
app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)
原因是Express按声明顺序执行中间件.在您当前的情况下,请求在cookie /会话中间件(Passport中间件所依赖的)之前访问Passport中间件.
(bodyParser()顺便提一下中间件也是如此,尽管你的路线目前还不依赖它)
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |