【问题标题】:How I can get user info profile from Google API?如何从 Google API 获取用户信息配置文件?
【发布时间】:2019-08-22 06:01:51
【问题描述】:

我必须通过谷歌帐户实现登录。

我想要一些建议。

我在谷歌控制台中创建了项目。添加范围用户信息.profile

我正在学习互联网上的课程说明,但我仍然无法获取用户信息(电子邮件、姓名、年龄...)。

步骤:

{
    "azp": "155122683461-51hq2n932svo4ajbt98ic0q67m4tuj5o.apps.googleusercontent.com",
    "aud": "155122683461-51hq2n932svo4ajbt98ic0q67m4tuj5o.apps.googleusercontent.com",
    "sub": "108865940357700877124",
    "scope": "https://www.googleapis.com/auth/userinfo.profile",
    "exp": "1554094721",
    "expires_in": "3326",
    "access_type": "offline"
}

你们能给我举个例子吗:(

谢谢

【问题讨论】:

  • 虽然我不确定这是否是你想要的结果,例如,这个端点怎么样? GET https://www.googleapis.com/oauth2/v3/userinfo?access_token=accessToken
  • 对不起。从现在开始,我知道为什么 api get token (accounts.google.com/o/oauth2/token) 总是返回错误:{ "error": "invalid_grant", "error_description": "Bad Request" }
  • @VũAnhDũng invalid_grant 是一个不同的问题,我建议您打开一个新问题并添加您的代码。
  • @DaImTo 我试过 GET https://www.googleapis.com/oauth2/v3/userinfo?access_token=accessToken 但回复不包含电子邮件???
  • 如果您请求电子邮件范围,响应将仅包含电子邮件。正如我在回答中提到的那样。

标签: node.js oauth google-api google-oauth


【解决方案1】:

人 api

您正在寻找的信息可以在people.get找到

GET https://people.googleapis.com/v1/{resourceName=people/*}

提示发送没有空格的字段掩码 - person.emailAddresses,person.birthdays 它的格式为 person info,因此用户必须填写此信息

但是,您需要添加范围以获取所需的信息

https://www.googleapis.com/auth/profile.emails.read
https://www.googleapis.com/auth/user.birthday.read

你可以在这里测试Google Apis explorer

google people api 的 node.js 快速入门可以找到here

用户信息端点

也可以使用 userinfo 端点,但它不会返回您要查找的信息

您需要请求电子邮件范围才能在以下回复中看到电子邮件,用户必须授予您查看其电子邮件的权限,以下是仅适用于个人资料范围的标准回复。

GET /oauth2/v2/userinfo HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: Bearer ya29.GlveBiwp4-NTPLU9VN3rn1enty11KOdQHGcyfZd1xJ1Ee9eGS2Pw2nJ7KDUBQPa-uT-AoKDQdoVigU6bruVIB1a3fiBu1n

回复

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

范围

您应该咨询节点tutorial,了解如何使用范围。请记住,如果您更改代码中的范围,您将需要再次请求用户访问权限。

const SCOPES = ['profile', 'email'];

【讨论】:

  • 我看不到列表作用域中的那个作用域可以选择
  • 哪个范围和哪个列表?范围只是你可以添加任何你想要的字符串。
  • GET /oauth2/v2/userinfo HTTP/1.1 Host: www.googleapis.com 工作,但我需要 user.email 回复
  • 正如我在回答和您的其他评论中提到的那样。如果要在 userinfo 端点中返回电子邮件,则需要在授权用户时添加电子邮件范围。
  • 谢谢。我尝试添加范围 userinfo.email 并且它工作
猜你喜欢
  • 2019-08-16
  • 1970-01-01
  • 2017-04-19
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多