NodeJS. Есть ли способ получить текущего пользователя, вошедшего в систему, с помощью API Google?

Можно ли получить текущего вошедшего в систему пользователя (адрес электронной почты, имя и т. д.) с помощью refreshToken, accessToken или методом, подобным этому Получить информацию о профиле вошедшего пользователя в NodeJS?


person STh    schedule 29.06.2020    source источник
comment
пожалуйста, отредактируйте свой вопрос и включите код авторизации.   -  person DaImTo    schedule 29.06.2020
comment
Благодарю вас! Что такое код авторизации?`   -  person STh    schedule 29.06.2020
comment
Код, который вы используете для входа пользователя. в частности, какие области вы используете при запросе авторизации данных пользователей.   -  person DaImTo    schedule 29.06.2020
comment
Это область: 'googleapis.com/auth/calendar.   -  person STh    schedule 29.06.2020
comment
Вы смотрели на это? stackoverflow.com/a/46780714/11072506   -  person Hamza Khuswan    schedule 29.06.2020
comment
@HamzaKhuswan, который будет работать, только если они запрашивают область профиля   -  person DaImTo    schedule 29.06.2020
comment
@HamzaKhuswan Это может исправить это; спасибо!   -  person STh    schedule 29.06.2020
comment
@DaImTo Нужно ли добавлять область профиля?   -  person STh    schedule 29.06.2020
comment
@STh да, вам нужно будет добавить область профиля, чтобы увидеть полную информацию о профиле, но если вы просто подождете их имя и адрес электронной почты, вы можете просто пройти через caledar.get, у него есть имя и адрес электронной почты, не уверен, что они должны были настроить имя есть или нет.   -  person DaImTo    schedule 29.06.2020
comment
Спасибо за все ваши ответы! Я особенно хотел получить их идентификатор Google ... В любом случае, ваш ответ ниже исправит это для большего количества людей ... @DaImTo   -  person STh    schedule 29.06.2020
comment
Конечная точка userinfo не в 100% случаев возвращает данные userinfo. но вы всегда должны вернуть подписку, по крайней мере, которая является их идентификатором Google.   -  person DaImTo    schedule 29.06.2020


Ответы (1)


вы можете использовать конечную точку userinfo, чтобы запросить часть этой информации.

https://openidconnect.googleapis.com/v1/userinfo?access_token=XXXX

Одна проблема заключается в том, что вам нужно будет добавить область profile в ваш запрос на авторизацию, тогда вы получите что-то вроде этого

{
  "sub": "117475532672775346",
  "name": "Linda Lawton",
  "given_name": "Linda",
  "family_name": "Lawton",
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GhroCYJp2P9xeYeYk1npchBPK-zbtTxzNQo0WAHI20",
  "locale": "en"
}

Затем вы также можете воспользоваться API Google People people.get что даст вам еще больше информации.

Однако вы не можете получить электронную почту от конечной точки userinfo без запроса области электронной почты, но есть трюк, который вам действительно не нужен, поскольку вы используете область календаря Google.

если вы используете calendar.get и запросите у основного календаря пользователя имя календаря, являющееся их адресом электронной почты.

{
 "kind": "calendar#calendar",
 "etag": "\"Qvsbvz0_YlxYi3Ml2Fd7A\"",
 "id": "[email protected]",
 "summary": "Linda Lawton ",
 "description": "test",
 "timeZone": "Europe/Copenhagen",
 "conferenceProperties": {
  "allowedConferenceSolutionTypes": [
   "hangoutsMeet"
  ]
 }
}
person DaImTo    schedule 29.06.2020
comment
ознакомьтесь со следующим руководством о том, как добавить в код дополнительные области developers.google.com/calendar/quickstart. /nodejs scopes — это просто массив строк - person DaImTo; 29.06.2020