Не может получить информацию о пользователе

Ниже приведен скрипт js для моего узла, чтобы получить данные пользователя Google с помощью accessToken

 var accessToken = req.body.accessToken;
            console.log(accessToken)


            var google = require('googleapis');
            //google api
            var plus = google.plus('v1');
            var OAuth2 = google.auth.OAuth2;

            var oauth2Client = new OAuth2(
                config.google.clientID,
                config.google.clientSecret,
                config.google.redirect_uri
            );
            oauth2Client.setCredentials({access_token: accessToken});
            plus.people.get({
                userId: 'me',
                auth: oauth2Client
            }, function (err, response) {
                // handle err and response
                if (err) {
                    reject(err)
                } else {
                    console.log(response);
                    resolve(response)
                }
            });

необходимо получить данные для входа в Google, используя accessToken. что не так в коде?

2 ответа

Вы можете использовать модуль запроса, чтобы получить сведения о пользователе на сервере вашего узла.


Но прежде чем запрашивать пользовательские данные, убедитесь, что вы авторизовали API, предоставив ему желаемую область действия. В вашем случае вам нужно дать https://www.googleapis.com/auth/userinfo.profile в объеме.


Когда вы получите свой accessToken, используйте этот токен для вызова этого Google API

https://www.googleapis.com/oauth2/v1/userinfo 

const request = require('request');
// use any api you want to call.
request({
  url: 'https://www.googleapis.com/oauth2/v1/userinfo',
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${YourAccessToken}`,
    'Accept': 'application/json'
  }
}, function(err, response, _user) {
  console.log('User Data', _user);
})


Я надеюсь, что это решит вашу проблему. Если проблема не устранена, вы можете проверить свои API Google на OAuth 2.0 Playground

Наиболее вероятной причиной является то, что данный пользователь не создал профиль Google+. Вот еще несколько вариантов.

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

Запрос

GET /userinfo/v2/me HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: Bearer uzG4XqnvucBFk3jylgxnbtNhoOt2wCc3QvUcjk7PZhJ5m6G7ibtlBwbAQntJjJtLsxZfoDjhbASpzLmcFnlZ9o4qoMd2fCV2eRb4O5XrKRAXC

отклик

{
  "family_name": "Lawton", 
  "name": "Linda Lawton", 
  "picture": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAl1I/UcwPajZOuN4/photo.jpg", 
  "locale": "en", 
  "gender": "female", 
  "link": "https://plus.google.com/+LindaLawton", 
  "given_name": "Linda", 
  "id": "117200475532672775346"
}

Вы также можете перейти через API Google People, используя ту же область профиля

GET /v1/people/me HTTP/1.1
Host: people.googleapis.com
Content-length: 0
Authorization: Bearer NuzG4XqnvucBFk3jylgxnbtNhoOt2wCc3QvUcjk7PZhJ5m6G7ibtlBwbAQntJjJtLsxZfoDjhbASpzLmcFnlZ9o4qoMd2fCV2eRb4O5XrKRAXC

Но эта конечная точка считывается из Google+, поэтому, если пользователь ничего не заполнил в своем профиле Google+, вы не увидите здесь много данных.

Другие вопросы по тегам