为 Google 上的操作链接的帐户,要在数据库中保留哪个字段?

Account linked for Actions on Google, which field to keep in DB?

我使用模拟器测试了帐户链接。我可以保留 originalRequest -> data -> user 中的哪个字段? userId 还是 accessToken

我发现它们总是在会话过期时重新生成(或通过切换 "Test status: Active"),这使得无法 SELECT * FROM User WHERE assistant_client_id = [something]

我知道我可以使用 accessToken 来查询 https://www.googleapis.com/userinfo/v2/me 的 "real"(?) id,但是对每个请求都这样做会增加额外的时间(而且助手不完全是病人)。

假设accessToken永远不会被其他人重用,我可以这样做吗?

  1. accessToken 存储在我的 User table 中。
  2. 对于后续请求,请使用 accessToken 进行检查。
  3. 如果不匹配,请查询 https://www.googleapis.com/userinfo/v2/me 以获取我可以用来查询我的 table 的 ID(或电子邮件),然后我将 accessToken 更新为最新的。

userId 字段和在某些情况下使用 sessionId 的模拟器目前存在错误,但在实际设备上的大多数情况下,这应该适用于调用之间。

但是,如果您使用的是帐户链接,则这是更好的方法。但是请记住,accessToken 而不是 标识符。正如您所注意到的,它是标识符的临时键。 (有时它是一个包含标识符的令牌,但在您的情况下不是。)访问令牌应该具有有限的生命周期 - 通常是一个小时。在其他情况下,您也会获得一个新的 accessToken,即使时间少于超时期限。

虽然您可以放心,如果您看到相同的 accessToken 两次,那么您是在与同一位用户交谈,但您不能假设同一位用户总是会给您相同的 accessToken .

您的方法很好,但您还需要处理旧访问令牌的清理工作。可能创建一个超时字段,并假设您可以在一小时后的某个时间将它们超时,或者创建从您的用户到最近的 accessToken 的第二个散列,并在 accessToken 替换为另一个时删除一.