2014-10-08 2 views
3

나는 passportjs를 배우고있다.왜 passport.authenticate가 두 번 호출 되었습니까?

app.get('/auth/google/return', 
passport.authenticate('google', { failureRedirect: '/login' }), 
function(req, res) { 
    res.redirect('/'); 
}); 

은 누군가가 나에게 이유를 이해하는 데 도움이 : 나는 그것은 다음 코드 줄

app.get('/auth/google', 
passport.authenticate('google', { failureRedirect: '/login' }), 
function(req, res) { 
    res.redirect('/'); 
}); 

그리고 그 후, 다음 행이 들어 여기 https://github.com/jaredhanson/passport-google/blob/master/examples/signon/app.js

여권 - 구글의 예를 찾고 있어요 passport.authenticate에 대한 중복 호출이 필요합니까?

답변

0

두 호출은 실제로 어떤 유형의 요청을 받았으며 흐름이 어느 인증 단계에 있는지에 따라 별개의 기능을 제공합니다.

첫 번째 호출 passport.authenticate은 (passport-google은 후드 아래 사용하는 것입니다) 오픈 ID 인증 및합니다 (return URL에 대한) 두 번째 통화를 시작하기 이전에 인증 요청에 응답하기 위해 오픈 ID 공급자가 사용됩니다. Passport Strategy는 두 번째 요청에서 관련 어설 션을 읽고 그에 따라 처리합니다. 어설 션이 실패하면 /login으로 리디렉션되거나 어설 션이 성공한 경우 /으로 리디렉션됩니다.

https://github.com/jaredhanson/passport-openid/blob/master/lib/passport-openid/strategy.js#L164의 소스 코드에는 무슨 일이 일어나고 있는지를 설명하는 잘 쓰여진 설명이 들어 있습니다.

마지막으로 다른 여권 전략은 다르게 행동 할 수 있으므로 콜백을 사용하는 모든 전략이 반드시 겉보기에 "반복 된"호출을 필요로하지는 않습니다 (passport.authenticate(...)).

관련 문제