Сбой входа в Google OAuth2 в первом запросе от клиента Node.js - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь реализовать «Вход через Google» на сервере Node.js.Я создал веб-клиент в консоли GCP и получил имя и идентификатор клиента.Это работает нормально, но я не могу понять, почему запрос не был выполнен для первого запроса.Я использую библиотеку 'googleapis' для создания моего клиента OAuth Node.js:

/* set-up the oauth client */
const oauth2Client = new google.auth.OAuth2(
  'xxxxxxxxx',
  'yyyyyyyyy',
  'https://evening-coast-89425.herokuapp.com/google-auth'
);

/* set-up the scope of request */
const scopes = [
  'https://www.googleapis.com/auth/plus.me',
  'https://www.googleapis.com/auth/userinfo.email',
];

/* generate web-client specific Google sign-in URL */
const url = oauth2Client.generateAuthUrl({
  // 'online' (default) or 'offline' (gets refresh_token)
  access_type: 'offline',
  scope: scopes
});

Здесь, как вы можете видеть, перенаправление от Google установлено на /google-auth маршрутизации в коде моего сервера, которыйЯ обрабатываю, как показано ниже:

app.get('/google-auth', async function(req, res) {

  var url_parts = url1.parse(req.url, true);
  var query = url_parts.query;
  var code = query.code;
  console.log("Code: " + code);

  const {tokens} = await (oauth2Client.getToken(code));
  oauth2Client.setCredentials(tokens);

  oauth2Client.on('tokens', (tokens) => {
    if (tokens.refresh_token) {
      // store the refresh_token in my database!
      console.log("Refresh token: " + tokens.refresh_token);
    }
    console.log("Login token: " + tokens.access_token);

    try {
      plus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) {
          //console.log("response : ", JSON.stringify(response));
          //resolve(response || err);
          console.log(response.data.emails[0].value);
          console.log(response.data.displayName);
          console.log(response.data.id);
          console.log(response.data.image.url);

          res.status(200).send('Yes');

      });
    } catch(err) {
      console.log("Error occured: " + err);
    }
  });
});

Когда я отправляю запрос на сгенерированный URL для входа в Google (url), я получаю «код» от Google в качестве параметра запроса в URL-адресе перенаправления.Затем этот код используется для получения токена для входа и, в конечном итоге, профиля пользователя.Когда я отправляю запрос в первый раз, я получаю код, но затем время ожидания истекает.Во второй раз, когда я обновляюсь, я получаю другой код, токен для входа и данные профиля пользователя.Может кто-нибудь объяснить, что я здесь делаю не так?Большое спасибо за помощь.

...