【发布时间】:2022-06-19 07:13:16
【问题描述】:
我正在尝试将照片上传到 Google Drive 功能(使用 Google Drive API 和 GIS)实现到我正在开发的网络应用程序中,但似乎无法弄清楚如何让用户通过身份验证超过访问令牌的指定到期时间(即 1 小时)而不提示用户或打开弹出窗口。
https://github.com/googleworkspace/browser-samples/blob/master/drive/quickstart/index.html 提供的示例代码强制用户单击“刷新”按钮以获取新令牌,但这意味着我必须强制用户每小时登录一次,这并不理想(因为用户可能会一次使用该应用超过一个小时)。
根据https://developers.google.com/identity/oauth2/web/guides/use-token-model#token_expiration,这似乎是故意的。但是,在环顾一番之后,我发现可以使用刷新令牌来生成一个新的访问令牌,该令牌会在一个小时后过期。假设您每 45 分钟左右生成一个新令牌(实际上是另一篇 Google 文章建议的,但我现在似乎找不到),那么您永远不必担心这种重新身份验证。
但是,我不知道如何获取刷新令牌。
Not receiving Google OAuth refresh token 建议发送access_type=offline 作为查询参数,但我没有使用任何重定向,并且上述initTokenClient 和requestAccessToken 的文档没有提及access_type 参数。
我得到的最接近的是定期调用requestAccessToken 方法,但这仍然会弹出一个让用户再次登录的弹出窗口,这是我试图避免的。即使使用requestAccessToken({ prompt: "" }) 仍然会弹出此弹出窗口,但它至少无需任何用户输入即可登录。有没有办法完全禁用这个弹出窗口?
在最坏的情况下,我强制用户每小时重新进行身份验证,但这似乎会导致用户体验不太理想。任何帮助表示赞赏。
【问题讨论】:
-
这个运气好吗?我也有同样的问题
-
我得出的结论是,当提示符为
none时出现的弹出窗口是用户体验中的一个缺陷。也许他们将来可能会修复它,但目前还没有地方可以向谷歌工程师报告。
标签: javascript google-api google-oauth google-identity