我如何刷新令牌? 我使用带有此令牌的Google api - 它可以工作但无法找到如何刷新它,在这个例子中我们不保存过期时间。 我需要
`access_type: offline `
然后
$client = new Google_Client();
//$client->setClientId($GoogleClientId);
$client->setApplicationName($GoogleAppName);
$client->setClientId($this->user->getGoogleId());
$client->setAccessType('offline');
如果令牌有效我可以工作但是当过期时我会尝试
$token = [
'access_token' => $this->user->getGoogleAccessToken(),
'expires_in' => (new \DateTime())->modify('-1 year')->getTimestamp(),
];
我把它放在任何日期,因为在这个例子中我们不保存过期时间
https://gist.github.com/danvbe/4476697
$client->setAccessToken($token);
if($client->isAccessTokenExpired()){
$refreshedToken = $client->refreshToken($client->getAccessToken());
这里我有错误
array:2 [▼
"error" => "invalid_request"
"error_description" => "Could not determine client ID from request."
]
有HwiAuthBundle方法来刷新令牌吗? 为什么这不适用于Google_Client刷新?
答案 0 :(得分:1)
在oauth2.0中刷新过期的访问令牌,您需要发送到端点:
您无法发送过期的accessToken以获取新刷新的accessToken。
public function refreshAccessToken($refreshToken, array $extraParameters = array())
{
$parameters = array_merge(array(
'refresh_token' => $refreshToken,
'grant_type' => 'refresh_token',
'client_id' => $this->options['client_id'],
'client_secret' => $this->options['client_secret'],
), $extraParameters);
$response = $this->doGetTokenRequest($this->options['access_token_url'], $parameters);
$response = $this->getResponseContent($response);
$this->validateResponseContent($response);
return $response;
}
function refreshAccessToken( $ refreshToken ,...
而非$ accessToken
我认为您需要在使用凭据构建客户端后调用
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->refreshToken($client->getRefreshToken());
https://developers.google.com/api-client-library/php/auth/web-app#creatingcred
您确定自己是$client->setClientId($this->user->getGoogleId());
吗?
什么是getGoogleId()?我认为您还需要创建一个oauth客户端ID:
https://developers.google.com/identity/sign-in/web/devconsole-project
在oauth中,client_id不是用户ID,而是应用ID
答案 1 :(得分:-2)
很抱歉让您失望,但看起来该软件包并没有实现任何刷新令牌功能。或者它留给你。
这是GitHub中的未解决问题,请查看:https://github.com/hwi/HWIOAuthBundle/issues/457
以下是该问题的评论:
此功能存在,但您可以根据需要轻松使用 一切都在你自己(处理存储更多关于令牌的细节, 检测到期,调用Google获取新令牌,以及 替换旧的,现在只有这个包的帮助,它的代码 允许您向Google索取新的新令牌: GenericOAuth2ResourceOwner :: refreshToken(),它应该工作 预期,但我很久没有使用这个包=)
那里的人们正在等待Gist(代码片段)向他们展示如何做到这一点,但到目前为止还没有。