`GoogleUser.getId()` (oauth) 与 `app.getUser().userId` (actions-on-google) 之间的区别

Difference between `GoogleUser.getId()` (oauth) vs `app.getUser().userId` (actions-on-google)

我从 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。

它们种不同类型的 ID。

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

然而,通过 OAuth 返回的 ID 是为了 link 他们到一个 Google 帐户,以及带来的所有影响,包括将他们与特定身份相关联。这个帐户链接是单独完成的,不会直接给你 ID - 而是给你一个 OAuth 访问令牌(你可以通过 app.getUser().accessToken 获得),你可以用它来获取他们的 Google ID 和您可能会获得的其他信息。

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