2014-04-12 6 views
0

나는 자동으로 Joomla에서 일정을 추가하는 스크립트를 만들려고합니다. 새 페이지를 추가하여 Google 캘린더에 추가하십시오. 나는이 코드로 만들었고 심지어는 효과가 있지만 시간이 조금 걸린다.오랫동안 Google API 승인

Google 인증이 어떻게 작동하는지 오해 한 것 같습니다. 먼저 해당 달력을 사용하도록 스크립트를 인증해야합니다. 나는 그것을 한 번 만들었지 만 한 시간 후에 나는 그것을 다시해야했다. 나는 그것을 영원히 또는 최소한 1 년 (한 시간 이상) 승인하고 싶습니다. 그리고 저장 과정에서 스크립트를 저장하기 때문에 자동으로 다시 사후 관리로 리디렉션되기 때문에 저장 프로세스 중에도 권한을 부여 할 수 없습니다.

한 가지 더 언급 할 점 : 리디렉션 URI가 있으며 관리 페이지의 index.php에 설정되어 있습니다. 그게 문제인지는 모르겠지만, index.php에 뉴스가 추가되어서는 안되기 때문에 ...... 같은 페이지입니다.

하지만 문제는 그것이 uri를 리디렉션하지 않는다고 생각하기 때문에 모든 것이 한 시간 동안 (또는 그 주위의) 작동합니다.

 require_once "google-api-php-client/src/Google_Client.php"; 
     require_once "google-api-phpclient/src/contrib/Google_CalendarService.php"; 

     session_start(); 

     $client = new Google_Client(); 
     $client->setApplicationName("Add Google Calendar Entries"); 

     $client->setClientId('####'); 
     $client->setClientSecret('####'); 
     $client->setRedirectUri('####'); 
     $client->setDeveloperKey('####'); 
     $cal = new Google_CalendarService($client); 

     if (isset($_GET['logout'])) { 
      unset($_SESSION['token']); 
     } 

     if (isset($_GET['code'])) { 
      $client->authenticate($_GET['code']); 
      $_SESSION['token'] = $client->getAccessToken(); 
      header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
     } 

     if (isset($_SESSION['token'])) { 
      $client->setAccessToken($_SESSION['token']); 
     } 

     if ($client->getAccessToken()) { 
      $calList = $cal->calendarList->listCalendarList(); 

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

     $event = new Google_Event(); 
     // some calendar adding stuff 

     } else { 
      $authUrl = $client->createAuthUrl(); 
      print "<a class='login' href='$authUrl'>Authorize!</a>"; 
     } 

     // Google Calendar API END 
    } 

그냥 요약 : 내 권한이 더 이상 작업 할 어쩌면 내 코드 또는 실수가 THX 여기

은 (사본 일부 구글 API를 예제 페이지에서 붙여 넣기) 내 코드입니다 그게 어떻게 작동하는지 나의 이해에.

+0

컴퓨터에서 PHP 세션의 수명은 어떻게됩니까? (참고로, 최신 버전의 Google API (https://github.com/google/google-api-php-client)를 사용하는 것이 좋습니다. – Plenka

+1

작동 방식이 아니므로 다시 인증해야합니다. 토큰이 만료 된 후 Joomla에서 JGoogle API를 사용/확장하려고 시도 할 수 있습니다. Joomla가 OAuth를 관리 할 수 ​​있기 때문입니다. – Elin

답변

1

승인을 요청할 때 사용자로부터 "오프라인"액세스를 요청하면 장기 액세스 권한을 얻는 것이 중요합니다.

$client->setAccessType('offline'); 
$authUrl = $client->createAuthUrl(); 

현재 세션 토큰뿐만 아니라 새로 고침 토큰을 반환해야합니다. 이 새로 고침 토큰을 저장해야합니다. 앱을 나중에 다시 승인하더라도 새로 고침 토큰은 다시 전송되지 않습니다. (그리고 이미 승인 된 사용자이고 오프라인 액세스를 추가 한 후 다시 승인해야하는 경우가 있습니다. 새로 고침 토큰을받지 못하는 경우가 있습니다.)

그런 다음 다음과 같이 확인하여 기록 된 상태로 유지할 수 있습니다 에 마지막으로

$client->setAccessToken($site->token); 

if($client->isAccessTokenExpired()) { 
    $NewAccessToken = json_decode($client->getAccessToken()); 
    $client->refreshToken($NewAccessToken->refresh_token); 
} 

, 나는 당신이 실제로 다른 세션에 걸쳐 유지하기 위해 대신 세션의 데이터베이스에 accessToken을 저장해야 함을 추가해야합니다. 잘만되면 그것은 벌써 명백했다.

관련 문제