Рабочий процесс аутентификации, такой как этот (oauth / openid), состоит из нескольких шагов.
перенаправить пользователя в службу аутентификации Google
googleаутентифицирует пользователя и запрашивает подтверждение у пользователя, чтобы принять / отклонить ваш сервис
, если пользователь принимает, Google перенаправляет пользователя обратно на URI обратного вызова вашего сервиса с кодом доступа.
ваш сервер (не браузер пользователя) запрашивает токен доступа / обновления на серверах Google с использованием идентификатора и секретного кода вашего приложения (которые были получены от Google при регистрации приложения) и кода доступа, полученного ранее.
если все хорошо, Google выдаст токен доступа / обновления для вашей службы, который вам нужно будет связать с пользователем на вашей стороне (либо существующим пользователем, использующим этот идентификатор Google, либо создайтеновый пользователь, как при регистрации, или связанный с уже зарегистрированным пользователем, как при подключении к учетной записи).
Для проверки того, что происходитn, вы можете проверить каждый шаг на вашей стороне:
Это просто перенаправит вашего пользователя в службу аутентификации Google
app.get('/auth/google',
passport.authenticate('google', {
scope: ['https://www.googleapis.com/auth/userinfo.email']
});
вы будете использовать эту конечную точку из вашего пользовательского интерфейса, что-то вроде:
<a href="/auth/google">Connect with google</a>
Как только Google аутентифицирует вашего пользователя и перенаправляет обратно вашего пользователя на ваш сервис, это конечная точка, на которую пользователь будет перенаправлен:
app.get('/auth/google/callback',
(req, res, next) => {
// You can inspect google's redirection here
return next();
},
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
В этот момент паспорт будет продолженпоток аутентификации для запроса токена доступа / обновления у Google.Обратный вызов определения вашей стратегии вызывается, когда ваш сервер запрашивает у Google токен доступа / обновления:
passport.use(new GoogleStrategy({
consumerKey: GOOGLE_CONSUMER_KEY,
consumerSecret: GOOGLE_CONSUMER_SECRET,
callbackURL: "http://www.example.com/auth/google/callback"
},
function(token, tokenSecret, profile, done) {
// you can debug google's response here (this is from your server's request)
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
Надеюсь, это поможет.