Не может получить информацию о пользователе
Ниже приведен скрипт 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+, вы не увидите здесь много данных.