【问题标题】:Getting new access_token via refresh_token is very unreliable通过 refresh_token 获取新的 access_token 很不靠谱
【发布时间】:2017-04-12 09:37:10
【问题描述】:

所以我正在尝试刷新访问令牌以使其正常工作。 当访问令牌过期时,我运行 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)
        ));

【问题讨论】:

    标签: php youtube youtube-api google-oauth youtube-data-api


    【解决方案1】:

    在您向 Google 授权期间,您将收到一个将在 1 小时或 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();
    

    欲了解更多信息,请查看此SO question

    【讨论】:

    • 您好,KENdi,首先,感谢您的回答。也许我不够清楚,但我没有问题获得 refresh_token 并使用它来获得新的 access_token。它只是每隔几天就停止为我工作,说我的凭据现在无效。 ("invalid_grant")
    猜你喜欢
    • 2018-12-25
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2015-01-24
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多