通过refresh_token获取新的access_token是非常不可靠的



,所以我试图使访问令牌刷新工作。当访问令牌过期后,我运行RefReshToken()并通过RefResh_Token以从Google获得新的access_token。

有时它似乎有效,但是其他情况下,我会收到错误消息 Invalid_grant 之后。似乎我在不重新授权访问我的YouTube频道的情况下无法超过几天。

我做错了什么?

if ($client->getAccessToken()) {      
    if($client->isAccessTokenExpired()) {
        $newToken = $client->getAccessToken();
        //Run refreshToken() and pass in the refresh token to get a fresh access token.
        $client->refreshToken($newToken['refresh_token']);
        //Take old key object and replace everything except for refresh_token    
        $newKey = $client->getAccessToken();
        $newKeyWithRefreshToken = json_decode($oldKey);
        $newKeyWithRefreshToken->access_token = $newKey['access_token'];
        $newKeyWithRefreshToken->token_type = $newKey['token_type'];
        $newKeyWithRefreshToken->expires_in = $newKey['expires_in'];
        $newKeyWithRefreshToken->created = $newKey['created'];
        //save to db
        DB::getInstance()->update('channel', $channelId , array(
            'credentials' => json_encode($newKeyWithRefreshToken)
        ));

在您在Google授权的授权下,您将收到一个令牌,该令牌将在一小时或3600秒内到期,并且正常被过期。因此,您需要的是刷新令牌以获得新的工作令牌。

这是您需要的步骤:

$token = $client->getAccessToken();
$authObj = json_decode($token);
if(isset($authObj->refresh_token)) {
save_refresh_token($authObj->refresh_token);
}

保存此refresh_token很重要,然后您可以使用

进行更新
$client->refreshToken($your_saved_refresh_token);

,然后将您的新访问令牌设置为会话:

$_SESSION['access_token'] = $client->getAccessToken();

有关更多信息,请检查此问题。

相关内容

  • 没有找到相关文章

最新更新