gpt4 book ai didi

php - 使用 OAuth 刷新 token 获取新的访问 token - Google API

转载 作者:可可西里 更新时间:2023-10-31 22:11:18 35 4
gpt4 key购买 nike

我的应用很简单,它连接到 Google+ API 以验证用户身份,如果成功,它会检索用户的电子邮件,然后根据电子邮件对给定的数据库执行一系列操作检索。

我的主要问题是,我的访问 token 每小时都会过期,我似乎不知道如何“刷新”它。我收到以下错误,我认为这是预期的:

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

我目前将访问 token 存储在数据库中,因此我可以在需要时进行检索。我唯一的问题是如何使用该 token 获得新 token ?

最佳答案

哇,我花了很长的时间才弄清楚这个问题,而且那里的答案对我来说似乎很不完整。

在我们开始之前请记住,此答案假定您使用的是最新的 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 请求刷新 token 。

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

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

快速说明:请务必记住,如果您之前已授权您的应用,您可能不会在响应中看到 refresh_token,因为它仅提供我们第一次调用 authenticate。因此,您可以转到 https://www.google.com/settings/securityRevoke Access 到您的应用,或者您可以在创建 Client 对象时添加以下行:

$gClient->setApprovalPrompt('force');

来自 Google:如果值为 force,则用户会看到一个同意页面,即使他们之前已同意您的应用程序用于一组给定的范围。这反过来确保 refresh_token 在每次授权时提供。

完整样本在这里:http://pastebin.com/jA9sBNTk

关于php - 使用 OAuth 刷新 token 获取新的访问 token - Google API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880928/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com