Токен доступа остается таким же после обновления с токеном обновления - PullRequest
0 голосов
/ 18 марта 2019

Я был заблокирован в течение двух дней, сталкиваясь с проблемами 0auth через 1 час на API YouTube.401 ошибка учетных данных.

$OAUTH2_CLIENT_ID = 'XXXXX';
$OAUTH2_CLIENT_SECRET = 'XXXXX';
$client = new Google_Client();
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
$service = new Google_Service_YouTube($client);                            
if (isset($_GET['code'])){
    $accessToken = $client->fetchAccessTokenWithAuthCode($_GET['code']);
    $client->setAccessToken($accessToken);
    $test=$client->getAccessToken();    
    //TEST REFRESH TOKEN
    print_r($test);
    sleep(10);
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    $test=$client->getAccessToken();
    print_r($test);                                                         
  }    

// Check to ensure that the access token was successfully acquired.
if ($client->getAccessToken()) {
 ... 
  foreach ($files as $file){    
      if ($client->isAccessTokenExpired()) {
         $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
         file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
       } // end if token expired                                     
  ====CALL YOUTUBE API HERE IN FOREACH LOOP ===
  }// end foreach files

}

Результат моего тестового кода показывает, что токен доступа не изменился вообще после предоставленного токена обновления, даже время истечения не уменьшило 'expires_in'

Так вот почему через час я столкнулся с ошибкой кредитования ... Я не знаю, что случилось с моим кодом. Пожалуйста, помогите мне, это результат моего тестового кода после получения кода доступа, так что вы можете увидеть 'Новый 'токен доступа похож на предыдущий, и я уже пытаюсь использовать encode_json также для параметра setAccessToken () и fetchAccessTokenWithRefreshToken ().не получаю ошибку, но результат все равно же ...

Array ([access_token] => ya29.GlvQBuGBfZDQn3E8HWd4wfSbb0hLHsYVGzPBE0boJuB4ien5pcsOGqXlkEyOU7mevDLOGOWbuakTyTiAUVf2bkxNwZXX [expires_in] => 3600 [refresh_token] => 1 / KEgjy2t9kTNwCXk-ZtMTSzPSS2xl4XX [сфера] =>https://www.googleapis.com/auth/youtube [token_type] => Знаменосец [создана] => 1552891085)

Array ([access_token] => ya29.GlvQBuGBfZDQn3E8HWd4wfSbb0hLHsYVGzPBE0boJuB4ien5pcsOGqXlkEyOU7mevDLOGOWbuakTyTiAUVf2bkxNwZXX [expires_in] => 3600 [refresh_token] => 1 / KEgjy2t9kTNwCXk-ZtMTSzPSS2xl4XX [scope] => https://www.googleapis.com/auth/youtube [token_type] => Носитель [создан] => 1552891085)

Спасибо вам

1 Ответ

0 голосов
/ 18 марта 2019

Срок действия маркеров доступа истекает через час, так они работают. По истечении срока действия токена доступа вы должны запустить свой код и получить новый токен доступа. Извлечение нового токена доступа до истечения срока его действия приведет к тому же токену доступа.

Ваш токен доступа был создан при создании (совет преобразователь эпохи ), добавьте 3600 (секунд), чтобы узнать, когда он истекает.

1552891085 <--- Monday, March 18, 2019 6:38:05 AM

Единственное, что я вижу неправильно в вашем коде, это то, что вы выбираете токен доступа, но фактически не используете его Oauth2Authentication.php

function getOauth2Client() {
    try {

        $client = buildClient();

        // Set the refresh token on the client. 
        if (isset($_SESSION['refresh_token']) && $_SESSION['refresh_token']) {
            $client->refreshToken($_SESSION['refresh_token']);
        }

        // If the user has already authorized this app then get an access token
        // else redirect to ask the user to authorize access to Google Analytics.
        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {

            // Set the access token on the client.
            $client->setAccessToken($_SESSION['access_token']);                 

            // Refresh the access token if it's expired.
            if ($client->isAccessTokenExpired()) {              
                $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
                $client->setAccessToken($client->getAccessToken()); 
                $_SESSION['access_token'] = $client->getAccessToken();              
            }           
            return $client; 
        } else {
            // We do not have access request access.
            header('Location: ' . filter_var( $client->getRedirectUri(), FILTER_SANITIZE_URL));
        }
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...