2017-10-07 71 views
1

我試圖製作一個使用谷歌API的用戶系統的Web應用程序。保持google當前用戶登錄的路徑

其實,我可以在我的谷歌賬戶只能連接到一個途徑,那就是:

$app->get('/home', function() use($client,$app){ 
    if(isset($_GET['code'])){ 
     $client->authenticate($_GET['code']); 
     $_SESSION['token'] = $client->getAccessToken(); 
    } 
    if(!isset($_SESSION['token'])){ 
     $url = $client->createAuthUrl(); 
     $output = '<a href="'.$url.'">Se connecter </a>'; 
    } else { 
     $client->setAccessToken($_SESSION['token']); 
     $token = json_decode($_SESSION['token']['access_token']); 
     $output = ""; 
     require "../view/planning.php"; 
    } 

    return $output; 
}); 

這裏是我的$客戶端:

$client = new Google_Client(); 
$client->setApplicationName("Application de test"); 
$client->setClientId(MY_CLIENT_ID); 
$client->setClientSecret(MY_CLIENT_SECRET); 
$client->setScopes('https://www.googleapis.com/auth/calendar.readonly'); 
$client->addScope('https://www.googleapis.com/auth/userinfo.email'); 
$client->setRedirectUri(MY_REDIRECT_URI); 
$client->setAccessType('online'); 

我的問題是:我怎麼能保持當前客戶到整個應用程序? 對於爲例,如果我有這樣的路線:

$app->get('/accueil', function() use($client){ 
    if(isset($_GET['code'])){ 
     $client->authenticate($_GET['code']); 
     $_SESSION['token'] = $client->getAccessToken(); 
    } 
    if(!isset($_SESSION['token'])){ 
     $url = $client->createAuthUrl(); 
     $output = '<a href="'.$url.'">Se connecter </a>'; 
    } else { 
     $client->setAccessToken($_SESSION['token']); 
     $token = json_decode($_SESSION['token']['access_token']); 
     require ('../view/accueil.php'); 
     $output = ""; 
    } 
    return $output; 
}); 

但是這條路線不工作,它讓我登錄的鏈接。我知道應用程序無法從url獲取'code',因爲沒有任何內容。

我也試圖保持'code'這樣的:

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

我如何才能讓用戶登錄?

+0

將「code」放入會話中。 – mega6382

+0

它似乎在我訪問另一條路線時,$ _SESSION變量不存在。 – AdrienG

回答

0

好吧,經過漫長的夜晚,我找到了解決方案。

它看起來像127.0.0.1上的重定向不同於重定向到本地主機,所以會話變量被重置。