php – 使用OAuth刷新令牌获取新的访问令牌 – Google API

我的应用程序很简单,它连接到Google API来验证用户,如果成功,它会检索用户的电子邮件,然后根据检索到的电子邮件在给定数据库上执行一系列操作.

我的主要问题是,每一个小时,我的访问令牌过期,我似乎不知道如何“刷新”它.我得到以下错误,我想象的是:

The OAuth 2.0 access token has expired, and a refresh token is not available.

我正在将访问令牌存储在数据库中,因此如果需要,我可以检索.我唯一的问题是如何使用该令牌获得新的令牌?

最佳答案
哇,花了我更长的时间来解决这个问题,而对我来说答案似乎还不完全.

在我们开始之前,请记住,这个答案假定您正在使用最新的Google API PHP Library,截至2014年5月26日.

1 – 确保您的应用请求的访问类型处于脱机状态.否则没有提供refresh_token.来自Google:只有当授权码请求中包含access_type = offline时,才会显示此字段.

$gClient->setAccessType('offline');

2 – 经过第一次授权,持续提供的refresh_token进一步访问.这可以通过cookies,数据库等完成.我选择存储在数据库中:

$tokens = json_decode($gClient->getAccessToken()); /* Get a JSON object */
setRefreshToken($con, $tokens->refresh_token /* Retrieve form JSON object */);

3 – 检查AccessToken是否已过期,如果是这样,请求从Google更新的令牌.

if ($gClient->isAccessTokenExpired()) {    
  $refreshToken = getRefreshToken($con, $email); 
  $gClient->refreshToken($refreshToken);
}  

其中getRefreshToken从我们的数据库检索先前存储的refresh_token,然后我们将该值传递给客户端的refreshToken方法.

快速注意:请记住,如果您以前授权了您的应用程序,则您可能不会在响应中看到refresh_token,因为只有在我们第一次通过验证时才提供此功能.因此,您可以转到https://www.google.com/settings/security和撤销访问您的应用程序,或者您可以在创建客户端对象时添加以下行:

$gClient->setApprovalPrompt('force');

来自Google:如果该值是强制的,那么即使用户先前已经同意了某个给定范围的应用程序,用户也会看到同意页面.这反过来确保每个授权都提供一个refresh_token.

完整示例:http://pastebin.com/jA9sBNTk

转载注明原文:php – 使用OAuth刷新令牌获取新的访问令牌 – Google API - 代码日志