为什么passport.authenticate会被叫两次?

时间:2014-10-08 23:57:12

标签: passport.js

我正在学习护照。我在这里看看护照 - 谷歌的例子 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吗?

1 个答案:

答案 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(...)进行相同的“重复”调用。