我正在学习护照。我在这里看看护照 - 谷歌的例子 https://github.com/jaredhanson/passport-google/blob/master/examples/signon/app.js
它包含以下代码行
app.get('/auth/google',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
随后,这些界限:
app.get('/auth/google/return',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
有人可以帮我理解为什么需要重复调用passport.authenticate吗?
答案 0 :(得分:1)
这两个调用实际上提供不同的功能,具体取决于接收的请求类型以及流程所在的身份验证阶段。
第一个调用passport.authenticate
是启动OpenID身份验证(这是passport-google
使用的内容),第二个调用(针对return
URL)由OpenID使用提供者响应先前的身份验证请求。 Passport策略从第二个请求读取相关断言并相应地处理它 - 如果断言失败,最终导致重定向到/login
,如果断言成功,则导致重定向到/
。
https://github.com/jaredhanson/passport-openid/blob/master/lib/passport-openid/strategy.js#L164的源代码包含一些写得很好的评论,解释了正在发生的事情。
最后一点,其他Passport策略可能会有不同的行为,因此并非所有带回调的策略都需要对passport.authenticate(...)
进行相同的“重复”调用。