2016-07-20 8 views
0

私は自分のアプリケーションとGoogleカレンダーを正常に統合します。 初めて、私は正常に認証され、すべてのイベントが正しくGoogleカレンダーに作成されます。トークンのみを使用してGoogleカレンダーにログイン

もう一度認証したくない場合は、ボタンをクリックして、アプリケーションのすべての新しいイベントをGoogleカレンダーに作成する必要があります。

私はそれがリフレッシュトークンによって行われると思います。 私はトークンを受け取った。 そのための私の下のコードを見てください。

<?php 
session_start();   
require_once('vendor/google/apiclient/src/Google/autoload.php'); 
require_once 'vendor/google/apiclient/src/Google/Client.php'; 
require_once 'vendor/google/apiclient/src/Google/Service/Calendar.php'; 



$scopes ="https://www.googleapis.com/auth/calendar.readonly"; 

$client_id = ''; 
$Email_address = '';  
$key_file_location = ''; 
$client_secret = "";  
$redirect_uri = ""; 
$key = file_get_contents($key_file_location); 


$client = new Google_Client(); 
$client->setApplicationName("Client_Library_Examples"); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setRedirectUri($redirect_uri); 
$client->setAccessType('offline'); // Gets us our refreshtoken 

$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly')); 

$cred = new Google_Auth_AssertionCredentials( 
$Email_address,  
array($scopes),  
$key   
);  
$client->setAssertionCredentials($cred); 
if($client->getAuth()->isAccessTokenExpired()) {   
$client->getAuth()->refreshTokenWithAssertion($cred); 
$_SESSION['token'] = $client->getAccessToken(); 
$client->setAccessToken($_SESSION['token']); 
} 
echo "Token".$_SESSION['token']; 
if ($client->getAccessToken()) { 
$service = new Google_Service_Calendar($client); 
$events = $service->events->listEvents('primary'); 
while(true) { 

foreach ($events->getItems() as $event) { 

echo $event->getSummary() . " ==> "; 
echo $event->end->dateTime; 
echo "<br>"; 
} 
$pageToken = $events->getNextPageToken(); 
if ($pageToken) { 
$optParams = array('pageToken' => $pageToken); 
$events = $service->events->listEvents('primary', $optParams); 
} else { 
break; 
} 
} 
} 


?> 

ここでトークンを取得しましたが、今では認証を何度も何度もやり直すことなくGoogleカレンダーにログインしたいと考えています。私は初めてそれをしたので。

今、トークンを使用してGoogleアカウントにログインできますか? 「はい」の場合、どうすればいいですか?

初めて私はユーザーを認証します。ここには自分のコードがあります。

<?php 
session_start(); 
$client = new Google_Client(); 
$client->setApplicationName("ABC-APP"); 
$client->setClientId(""); 
$client->setClientSecret(''); 
$client->setRedirectUri(''); 
$client->setScopes(array(
'https://www.googleapis.com/auth/calendar', 
'https://www.googleapis.com/auth/calendar.readonly', 
)); 
if (isset($_GET['code'])) { 
$client->authenticate($_GET['code']); 
$_SESSION['token'] = $client->getAccessToken(); 
if (isset($_SESSION['token'])) { 
$client->setAccessToken($_SESSION['token']); 
} 
} 

if ($client->getAccessToken()) { 
    $service = new Google_Service_Calendar($client); 
    $event = new Google_Service_Calendar_Event(array(
     'summary' => "Myevent", 
     'location' => "31 Shuijd", 
     'description' => "Test Descriptionj", 
     'start' => array(
      'dateTime' => "12/1/2016", 
      'timeZone' => "Asia/Kolkata", 
     ), 
     'end' => array(
      'dateTime' => "12/2/2016", 
      'timeZone' => "Asia/Kolkata", 
     ), 
     'recurrence' => array(
      'RRULE:FREQ=DAILY;COUNT=2' 
     ), 
     'attendees' => array(
      array('email' => $row['contact_email']), 
     ), 
     'reminders' => array(
      'useDefault' => FALSE, 
      'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60), 
      array('method' => 'popup', 'minutes' => 10), 
     ), 
     ), 
    )); 
    $event = $service->events->insert("primary", $event); 


} 
?> 

答えて

-1

私のアプリケーションと正常に統合されています。初めて、私は正常に認証され、すべてのイベントは正しくGoogleカレンダーに作成されます。 - >初めてイベントを作成したときにコードを添付してください。

+0

トークンを初めて取得しました。あなたが2度目に従った手順と同じです。そのトークンを試してイベントを追加してください。テストされていませんが動作するはずです。 –

0

あなたは良い方向に向かっています。アクセスタイプがofflineに設定された後、Googleから受信した更新トークンを使用して、有効期限が切れたときにアクセストークンを更新するだけで済みます。オフラインアクセスを許可するユーザーごとにデータベースに保存されているリフレッシュトークンを持っている必要があります。アクセストークンを再度許可せずに更新することができます。

コードは次のようになります:

$client->refreshToken($refreshToken); 
$tokens = $client->getAccessToken(); 
$tokens->refresh_token = $refreshToken; // the refresh token is not returned, so if you're updating the session or database, you should set it manually so you don't lose it 
+0

サンプルコードはありますか?私はそれについて何も考えていない。 –

+0

私はこのラッパーhttps://packagist.org/packages/adevait/gmail-wrapperのgmail用に実装しました。プロセスは同じです。インクルード/ auth.phpファイルを確認してください。基本的には、アクセストークンの有効期限が切れている場合は、 'refreshToken'関数を呼び出してアクセストークンを再度取得します。 – trajchevska

0

あなたはちょうどあなたが初めて にログインすると、セッションにアクセストークンを保存し、あなたがイベントを作成したいとき

$session_token = <access token store in session > 
if (!$client->getAccessToken()) { 
    $client->setAccessToken($session_token); 
} 
が必要な場合は、これを渡す必要があります

編集::変更

if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
} 

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

私はすでにこれをしています。 今、私はautneticationを使用せずにすべての新しいイベントを作成したいと思います。初めて認証されたので2回目は、ユーザーを認証する必要はありません。私はリフレッシュトークンを使いたいだけです。 –

+0

@harishmahajan、私はコード –

+0

を更新しましたトークンは1時間だけ許可されています。 これで有効期限が切れます。それから私たちはトークンを更新する必要がありますが、私はどのようにそれを使用するか考えていません。 –

関連する問題