Nkumary Ответов: 0

Node.js. Passport-Google-OAuth обратный вызов не работает при использовании в веб-сервисе


Я использовал Passport-Google-OAuth в Node.js проект веб-сервиса. Я использую OAuth2Strategy.

Процесс, который я использовал, заключается в том, что я вызываю метод веб-службы для аутентификации пользователя из его учетной записи Gmail. Изначально я обслуживаю необработанный HTMl, который получаю от вызова Passport-google-OAuth. И это прекрасно работает.

Затем я вхожу в систему с действительными учетными записями Gmail. Как только URL обратного вызова вызывается google, сервер переходит в бесконечный цикл и вызывает url обратного вызова снова и снова через фиксированный интервал времени.

Моя конфигурация стратегии Passport для Google выглядит следующим образом:
// 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        : "948630708036-2t6mestiv81gtv0s9n6iptoava4o1cpa.apps.googleusercontent.com",
            clientSecret    : "omugRnr7nad2yMmefiZdBaLL",
            callbackURL     : "http://localhost:4000/api/auth/google/callback"
        },
        function(token, refreshToken, profile, done) {
            console.log('Inside global callback.');
            // make the code asynchronous
            // User.findOne won't fire until we have all our data back from Google
            process.nextTick(function() {

                // try to find the user based on their google id
                User.findOne({ 'google.id' : profile.id }, function(err, user) {
                    if (err)
                        return done(err);

                    if (user) {

                        // if a user is found, log them in
                        return done(null, user);
                        
                    } else {
                        // if the user isnt in our database, create a new user
                        var newUser          = new User();

                        // set all of the relevant information
                        newUser.google.id    = profile.id;
                        newUser.google.token = token;
                        newUser.google.name  = profile.displayName;
                        newUser.google.email = profile.emails[0].value; // pull the first email

                        return done(null, newUser);
                       
                    }
                });
            });
        }));


Затем я вызываю паспорт из конечной точки в сервисном проекте:

passport.authenticate('google', { session:false,scope : ['profile', 'email'] });


А URL обратного вызова содержит следующий код, в котором я отправляю возвращенные данные учетной записи Google пользователя в формате JSON клиенту, который получил доступ к веб-сервису изначально.

function(req, res) {
  console.log('Callback by Google:'+res.body+' || '+ res.headers);
  console.log('Response Object:'+util.inspect(res));
  passport.authenticate('google', {	session : false	}),function(req,res){
					console.log('Callback authenticated.User: +req.user);
                    res.json(req.user);
            }



В журнале я получаю "обратный вызов от Google: undefined || undefined".

Я отключаю сеансы, так как это будет сервер API, передающий данные различным клиентам.

Я не знаю, какую ошибку совершаю. Пожалуйста, укажите любой ресурс или пример, где Passport-Google-OAuth(OAuth2Strategy) используется на сервере API(веб-сервис). Нужно ли мне идти каким-то другим путем? Заранее спасибо за вашу помощь.

0 Ответов