2017-05-11 1 views
0

Google API를 사용하여 refreshToken 프로 시저에 문제가 발생하면 만료 된 토큰이 만료되면 refreshToken이 AccessToken을 얻지 못합니다. 이 시점에서 이미 새로 고침 토큰을 db에 저장했습니다.PHP Google API 새로 고침 토큰

$client = new Google_Client(); 
$client->setApplicationName("APP NAME"); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setAccessType('offline'); 
$client->setScopes(array('https://www.googleapis.com/auth/calendar')); 
$client->setAccessToken(json_encode($access_token_from_db)); 

if ($client->isAccessTokenExpired()) : 
    $client->refreshToken($refresh_token_from_db); 
    $new_access_token = $client->getAccessToken(); 
    print_r($access_token); 
    //save to db -- but this fails 
endif; 

이 실행 후 새 액세스 토큰은 여전히 ​​비어 있습니다. 만료를 확인하기 전에 현재 만료 된 토큰으로 setAccessToken을 설정하더라도 동일한 문제가 지속됩니다.

refreshToken을 이미 저장 한 후 상태가 단순하지 않은 것처럼 보입니다.

내 응용 프로그램에서는 응용 프로그램 목적을 이해하는 데 필요한 경우 작업에 따라 사용자의 달력에 업데이트를 보내도록 cron 작업을 수행합니다.

이 대답은 나에게 올바른 보이지 않는 이유

: How to refresh token with Google API client?

이는 $ 클라이언트 -> isAccessTokenExpired() 메소드를 사용하지 않는 있기 때문에 플러스, 깨끗한 해결책이 아니라, 스크립트는해야한다 아주 최소 및 작은 작업을 완료합니다. 이론적으로 :

  • 인증
  • 에 주어진 일에 setAccessToken (기능을 통해) 만료 된 경우, 새로운 토큰
  • 는 동안

을 토큰을 저장하고 계속 액세스 할 수 새로 고침을 사용 위의 예는 2013 년의 답변과 비슷한 기능을 가지고 있지만 제대로 작동 할 수 있지만 최선의 방법은 아닙니다.

+0

가능한 복제 [구글 API 클라이언트와 토큰을 새로 고침하는 방법?] (http://stackoverflow.com/questions/9241213/how-to-refresh-token -with-google-api-client) – DaImTo

+0

그 대답은 구식이며 isAccessTokenExpired 메소드 대신에 타이밍을 사용하고 복잡한 응답이므로 더 깔끔한 해결책/방법이 가능해야합니다. –

+0

복제본은 새로 고침 토큰이 만료되었다고 생각하지만 가능하지는 않습니다. –

답변

0

내 실수는 내가 내 clientID를 엉망으로 만들었지 만 작고 효율적이며 효과적이었던 정답을 찾기 위해 나를 영원히 필요로했기 때문에 여기에이 스크립트를 게시하고 있습니다 (아래는 엄격히 토큰과 이미)하여 DB에 저장되어있는 새로 고침 :

$client = new Google_Client(); 
$client->setApplicationName('APP NAME'); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setAccessType('offline'); 
$client->setScopes(array('https://www.googleapis.com/auth/calendar')); 
// my app is for google calendar. 

$access_token_from_db = 'XXXXXX'; 
$refresh_token_from_db = 'XXXXX'; 
$_tokenArray['access_token'] = $access_token_from_db 

//must be set as json 
$client->setAccessToken(json_encode($_tokenArray)); 

//check if token expired: 
if ($client->isAccessTokenExpired()) : 
    $client->refreshToken($refresh_token_from_db); 
    $new_access_token = $client->getAccessToken(); 

    //now save your new access token to your db 

endif;