Стратегия Passport Google - когда выполняется обратный вызов passport.use?CallbackURL? - PullRequest
0 голосов
/ 27 мая 2019

Я использую 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.

1 Ответ

0 голосов
/ 27 мая 2019

В вашем приложении, когда пользователь впервые разрешает вам аутентифицировать свою учетную запись через Google, необходимо учитывать два возможных «потока»:

  • пользователь уже имеетсуществующая учетная запись в вашей системе, и она хотела бы связать эту учетную запись со своей идентификационной информацией Google.
  • пользователь создает новую учетную запись в вашей системе, и вы предоставляете ей возможность создать новуюаккаунт, используя свою идентификационную информацию Google

Конечный результат, если пользователь выбирает аутентификацию с помощью Google, - это запись в вашей базе данных, содержащая дополнительную информацию, предоставленную в ответе службы аутентификации Google.Данные выглядят примерно так же, как на этой странице в документах паспорта .

Вызов passport.use(...) с первым аргументом объекта с вашими токенами - это то, что использует паспорт для доступа к системе Google (стандарт OAUTH2полномочия).Второй аргумент - это функция обратного вызова, которая взаимодействует с уровнем данных вашей системы, например: User.findOrCreate(data).

. При будущих посещениях вашего приложения пользователь может воспользоваться тем фактом, что его учетная запись «связана» сих идентификационные данные Google и простой вход в систему.

...