2017-10-07 80 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上的重定向不同于重定向到本地主机,所以会话变量被重置。