Google OAuth One Time并保存访问令牌以供将来使用(长期访问令牌)

时间:2013-08-07 10:43:37

标签: javascript google-oauth access-token

我正在开展项目,其中我使用Google分析API进行基于 JAVASCRIPT 的核心报告。用户登录和接受应用程序后验证权限Google分析代码工作正常。但是,当用户从google.com或任何谷歌的相关网站退出时,如

  

google + drive.google.com www.google.com /分析

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

  

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

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

2 个答案:

答案 0 :(得分:0)

假设您想让用户登录即使他们退出Google,那么您只有一个选项,您必须自己进行会话管理。您可以获得长期令牌,刷新令牌,但绝对不要将其保存在cookie中,将其保存在数据库中。

答案 1 :(得分:0)

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

$client->setAccessType("offline");

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

然后,您将在每次旧的访问令牌到期时使用此刷新令牌来获取新的访问令牌:

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

在上面的检查中,我没有添加任何条件来查看旧的访问令牌是否确实过期。但是上面的代码返回一个数组,并且如果您检查它,您会看到它具有一个名为“ created”的键。 Google似乎将访问令牌的有效期保留为1个小时,因此您需要检查旧的创建时间,看是否距离该时间已经快一个小时了,然后运行fetchAccessTokenWithRefreshToken()方法。

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

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

更新:

有时候,仅由于您将访问类型设置为“离线”而无法发送刷新令牌。除了$client->setAccessType("offline");之外,您还必须设置其他属性,请务必确保取回刷新令牌

所以您会这样做:

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

要始终在用户每次对其帐户进行身份验证时获取刷新令牌。