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(веб-сервис). Нужно ли мне идти каким-то другим путем? Заранее спасибо за вашу помощь.