1

我正在开发一个项目,在该项目中我使用 Google 分析 API 进行基于JAVASCRIPT. 用户登录并在接受应用程序身份验证权限后谷歌分析代码工作正常。但是当用户从 google.com 或任何 google 的相关网站(如

谷歌+ drive.google.com www.google.com /analytics

再次回到我的应用程序,它需要登录。他们是否有任何解决方案将用户访问令牌保存在 cookie 中,如果用户从任何谷歌引用网站注销并且我的应用程序使用其存储的长期访问令牌,因此无需再次登录。

供参考检查该链接。 https://oauth2-login-demo.appspot.com/profile

我用谷歌搜索了我的问题,在此期间我还检查了谷歌访问令牌的默认时间是60 分钟(1 小时)。我需要长期用户访问令牌,因此不需要一次又一次地登录。它让用户感到沮丧。

4

2 回答 2

0

我知道已经晚了,但是对于遇到这个的人来说。如果您使用的是 PHP 和 Google PHP 客户端,则需要在验证用户时将访问类型设置为离线:

$client->setAccessType("offline");

这将导致 Google 发回您为用户存储的刷新令牌。

然后,每次旧访问令牌过期时,您都可以使用此刷新令牌获取新的访问令牌:

$acess_token = $client->fetchAccessTokenWithRefreshToken($refresh_token);

在上面的检查中,我没有添加任何条件来查看旧的访问令牌是否确实已过期。但是上面返回一个数组,如果你检查它,你会看到它有一个名为“created”的键。谷歌似乎让访问令牌的有效期为 1 小时,因此您需要检查旧创建的时间,看看自那时以来是否已经将近一小时,然后运行该fetchAccessTokenWithRefreshToken()方法。

或者,您可以使用$client->isAccessTokenExpired();

您可以在此处阅读有关此内容的更多信息:https ://developers.google.com/identity/protocols/oauth2/web-server#offline (有其他语言的示例)

更新:

有时不会仅仅因为您将访问类型设置为“离线”而发送刷新令牌。除了$client->setAccessType("offline");始终确保取回刷新令牌之外,您还必须设置另一个属性

所以你会这样做:

$client->setAccessType("offline");
$client->setApprovalPrompt('force');

每次用户验证其帐户时始终获取刷新令牌。

于 2020-06-19T22:34:35.943 回答
-1

假设即使用户退出 Google,您也希望让用户保持登录状态,那么您只有一个选择,您必须推出自己的会话管理。你可以获得一个长期存在的令牌,一个刷新令牌,但绝对不要将它保存在 cookie 中,将它保存在数据库中。

于 2013-08-09T21:56:14.137 回答