我在用谷歌登录。用户来到我的网站并使用gapi.auth2.getAuthInstance().signIn()
登录,或者他们已经登录,当页面加载(或重新加载)时,我们获取状态。此时,我有一个有效期为一小时的身份令牌,可以在服务器上进行验证。
当用户离开浏览器时(比方说过夜),这个令牌就过期了。gapi.auth2.getAuthInstance().isSignedIn.get()
返回true,但令牌不验证。
如何在用户的会话处于活动状态(即浏览器尚未关闭)时登录并使其保持登录状态?或者刷新令牌?任何比重新加载页面更优雅的事情...
编辑:刷新令牌不是正确答案;我不想脱机访问(并且不想请求权限)。Google显然认为用户仍然登录到我的应用程序中;用户可以重新加载页面并获得新的令牌,而无需再次提供凭据。当然,有比隐藏的iframe更优雅的机制来获取更新的令牌?
发布于 2016-06-18 19:10:42
如果令牌过期,您可以调用gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse()
。它返回一个承诺。
发布于 2020-06-11 11:13:50
我提出了一个issue with Google over this,因为他们没有正确地记录这一点,这太荒谬了。
My comment here建议我如何使用上面的内容完成刷新。
发布于 2016-01-07 14:31:52
顺便说一句,我们已经设法(主要)通过listener approach让它工作了。似乎在访问令牌过期前大约5分钟调用了'userChanged‘回调。这足以让我们在不刷新页面的情况下提取和更新访问令牌。
然而,当计算机从睡眠中恢复时,并不完全起作用。这可以通过reloading the page on wake up相对容易地解决。
https://stackoverflow.com/questions/32150845
复制相似问题