【问题标题】:Difference between `GoogleUser.getId()` (oauth) vs `app.getUser().userId` (actions-on-google)`GoogleUser.getId()` (oauth) 与 `app.getUser().userId` (actions-on-google) 之间的区别
【发布时间】:2017-05-31 14:11:34
【问题描述】:

我从app.getUser()actions-on-google-nodejs 应用程序获得的id 看起来与我从Oauth 获得的id 完全不同。

app.getUser() 在 Google 助理中

{ userId: 'KMdEs***szG-ZRQl***cU',
  user_id: 'KMdEs***szG-ZRQl***cU',
  userName:
    {
[...]

无论有无app.SupportedPermissions.NAME 权限,都会返回相同的id

googleUser.getBasicProfile().getId() 在 Google OAuth 中

11348***63489

有没有办法匹配这些用户?它是开发者控制台中的同一个 Google 项目,所以我假设即使 Google 会为每个项目生成唯一 ID,它也应该是相同的,但是在这种情况下,我似乎得到了完全不同类型的 id。

【问题讨论】:

    标签: google-oauth actions-on-google


    【解决方案1】:

    它们不同类型的 ID。

    app.getUser() 返回的 ID 是一个匿名的项目唯一标识符,可以以某些与使用 Web cookie 相同的方式使用。它无法针对特定帐户进行识别 - 但它将在所有会话中保持一致(除非用户重置)。您可以通过它获得的个人资料信息(他们的名字)也被认为是非识别性的。两者都旨在用于制作更友好的界面,而不是作为公司标识符。例如,用户可以重置他们的 Google Home 设备,这可能会将其重置为不同的 ID。

    但是,通过 OAuth 返回的 ID 旨在将它们与 Google 帐户相关联,并带来所有影响,包括将它们与特定身份相关联。此帐户链接是单独完成的,不会直接为您提供 ID - 相反,它会为您提供 OAuth 访问令牌(您可以通过 app.getUser().accessToken 获得),您可以使用它来获取他们的 Google ID 和您可能的其他信息范围内获取。

    理论上,如果您启用了帐户关联,则可以将两者匹配。实际上,如果您启用了 Account Linking,您将不会关心 app.getUser().userId,因为您拥有 Access Token,它将为您提供他们的 Google ID。如果您没有启用帐户链接 - 无法将两者匹配,您应该将 userId 视为匿名(但一致)用户。

    【讨论】:

    • 我认为这两个中的一个应该是特定于项目的,但我在同一个项目上下文中登录,所以我认为让项目特定 ID 在外部可用是一个不错的主意谷歌上的行动也是如此。毕竟,如果我让用户通过适当的 OAuth 流程,那么我认为我也可以使用识别性较低的 ID 来信任我。无论如何,帐户链接似乎都是关于让用户登录一些现有的非 Google 帐户,我想我会单独询问如何登录 Google 帐户然后:/
    • 帐户链接可以用于登录 Google 帐户 - 但是可以,最好单独提问。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多