Я использую Passport и работаю над стратегией Google OAuth 2 . У меня проблемы с пониманием потока.
Вот код в официальных документах :
var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
// Use the GoogleStrategy within Passport.
// Strategies in Passport require a `verify` function, which accept
// credentials (in this case, an accessToken, refreshToken, and Google
// profile), and invoke a callback with a user object.
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: "http://www.example.com/auth/google/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
А затем это для маршрутов:
// GET /auth/google
// Use passport.authenticate() as route middleware to authenticate the
// request. The first step in Google authentication will involve
// redirecting the user to google.com. After authorization, Google
// will redirect the user back to this application at /auth/google/callback
app.get('/auth/google',
passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));
// GET /auth/google/callback
// Use passport.authenticate() as route middleware to authenticate the
// request. If authentication fails, the user will be redirected back to the
// login page. Otherwise, the primary route function function will be called,
// which, in this example, will redirect the user to the home page.
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
Вот мое понимание потока. Пользователь нажимает кнопку, чтобы войти с Google в браузере. Запрос отправлен на /auth/google
. Который звонит passport.authenticate
. Оттуда Google обрабатывает некоторые вещи, и как только пользователь дает нам разрешение на доступ к своей учетной записи Google, это часть, которую я не понимаю.
Какой следующий шаг? Похоже, что Google отправит ответ на callbackURL
, который мы предоставляем. Но в таком случае, когда выполняется обратный вызов на passport.use
? Этот обратный вызов принимает accessToken
, refreshToken
и profile
, так что похоже, что он получает ответ от Google, а не callbackURL
.