RefreshToken 在我获得新令牌 google 张 API 后没有被发回
RefreshToken Not getting send back after I get new token google sheets API
我正在使用 google 工作表 API 和 PHP 并遵循可以在此处找到的快速入门指南 https://developers.google.com/sheets/quickstart/php
当我正确授权并在指定路径中存储以下 json 文件时
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "xxxxxx",
"created": 1472731452
}
在此过期后,我的代码中会触发以下内容
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken(
$client->getRefreshToken()
);
$this->filesystem
->put(
self::CREDENTIALS,
json_encode($client->getAccessToken())
);
}
现在我的问题是,当该代码被触发时,它会将我的文件更新为如下内容。
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"created": 1472731452
}
如您所见,不再有刷新令牌。当此令牌过期时,我开始收到以下错误
[LogicException]
refresh token must be passed in or set as part of setAccessToken
这完全可以理解,因为我那里已经没有刷新令牌了。
我的问题是为什么要删除刷新令牌?我调用的方法与快速入门指南中的方法相同 https://developers.google.com/sheets/quickstart/php
我在指南中专门谈论这部分
// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}
你的 refresh token expired 因为你代码中设置的生命周期是 3600 秒 only/1 小时。
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600, //refresh_token good for 1 hour
"refresh_token": "xxxxxx",
"created": 1472731452
}
第一次授权码交换时,离线场景获取refresh token。在这些情况下,您的应用程序可能会通过向 Google OAuth 2.0 授权服务器发送刷新令牌来获取新的访问令牌。
要以这种方式获取新的访问令牌,您的应用程序会向 https://www.googleapis.com/oauth2/v4/token 发送一个 HTTPS POST 请求。请求必须包含以下参数:
这样的请求类似于以下内容:
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
refresh_token=1/6BMfW9j53gdGImsiyUH5kU5RsR4zwI9lUVX-tqf8JXQ&
grant_type=refresh_token
检查此 SO thread 以获取更多参考。
希望这对您有所帮助!
我正在使用 google 工作表 API 和 PHP 并遵循可以在此处找到的快速入门指南 https://developers.google.com/sheets/quickstart/php
当我正确授权并在指定路径中存储以下 json 文件时
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "xxxxxx",
"created": 1472731452
}
在此过期后,我的代码中会触发以下内容
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken(
$client->getRefreshToken()
);
$this->filesystem
->put(
self::CREDENTIALS,
json_encode($client->getAccessToken())
);
}
现在我的问题是,当该代码被触发时,它会将我的文件更新为如下内容。
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"created": 1472731452
}
如您所见,不再有刷新令牌。当此令牌过期时,我开始收到以下错误
[LogicException]
refresh token must be passed in or set as part of setAccessToken
这完全可以理解,因为我那里已经没有刷新令牌了。
我的问题是为什么要删除刷新令牌?我调用的方法与快速入门指南中的方法相同 https://developers.google.com/sheets/quickstart/php
我在指南中专门谈论这部分
// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}
你的 refresh token expired 因为你代码中设置的生命周期是 3600 秒 only/1 小时。
{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600, //refresh_token good for 1 hour
"refresh_token": "xxxxxx",
"created": 1472731452
}
第一次授权码交换时,离线场景获取refresh token。在这些情况下,您的应用程序可能会通过向 Google OAuth 2.0 授权服务器发送刷新令牌来获取新的访问令牌。
要以这种方式获取新的访问令牌,您的应用程序会向 https://www.googleapis.com/oauth2/v4/token 发送一个 HTTPS POST 请求。请求必须包含以下参数:
这样的请求类似于以下内容:
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
refresh_token=1/6BMfW9j53gdGImsiyUH5kU5RsR4zwI9lUVX-tqf8JXQ&
grant_type=refresh_token
检查此 SO thread 以获取更多参考。 希望这对您有所帮助!