为 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
永远不会被其他人重用,我可以这样做吗?
- 将
accessToken
存储在我的 User
table 中。
- 对于后续请求,请使用
accessToken
进行检查。
- 如果不匹配,请查询
https://www.googleapis.com/userinfo/v2/me
以获取我可以用来查询我的 table 的 ID(或电子邮件),然后我将 accessToken
更新为最新的。
userId
字段和在某些情况下使用 sessionId
的模拟器目前存在错误,但在实际设备上的大多数情况下,这应该适用于调用之间。
但是,如果您使用的是帐户链接,则这是更好的方法。但是请记住,accessToken
是 而不是 标识符。正如您所注意到的,它是标识符的临时键。 (有时它是一个包含标识符的令牌,但在您的情况下不是。)访问令牌应该具有有限的生命周期 - 通常是一个小时。在其他情况下,您也会获得一个新的 accessToken
,即使时间少于超时期限。
虽然您可以放心,如果您看到相同的 accessToken
两次,那么您是在与同一位用户交谈,但您不能假设同一位用户总是会给您相同的 accessToken
.
您的方法很好,但您还需要处理旧访问令牌的清理工作。可能创建一个超时字段,并假设您可以在一小时后的某个时间将它们超时,或者创建从您的用户到最近的 accessToken
的第二个散列,并在 accessToken
替换为另一个时删除一.
我使用模拟器测试了帐户链接。我可以保留 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
永远不会被其他人重用,我可以这样做吗?
- 将
accessToken
存储在我的User
table 中。 - 对于后续请求,请使用
accessToken
进行检查。 - 如果不匹配,请查询
https://www.googleapis.com/userinfo/v2/me
以获取我可以用来查询我的 table 的 ID(或电子邮件),然后我将accessToken
更新为最新的。
userId
字段和在某些情况下使用 sessionId
的模拟器目前存在错误,但在实际设备上的大多数情况下,这应该适用于调用之间。
但是,如果您使用的是帐户链接,则这是更好的方法。但是请记住,accessToken
是 而不是 标识符。正如您所注意到的,它是标识符的临时键。 (有时它是一个包含标识符的令牌,但在您的情况下不是。)访问令牌应该具有有限的生命周期 - 通常是一个小时。在其他情况下,您也会获得一个新的 accessToken
,即使时间少于超时期限。
虽然您可以放心,如果您看到相同的 accessToken
两次,那么您是在与同一位用户交谈,但您不能假设同一位用户总是会给您相同的 accessToken
.
您的方法很好,但您还需要处理旧访问令牌的清理工作。可能创建一个超时字段,并假设您可以在一小时后的某个时间将它们超时,或者创建从您的用户到最近的 accessToken
的第二个散列,并在 accessToken
替换为另一个时删除一.