保持谷歌当前用户记录的路线

时间:2017-10-07 21:14:08

标签: php authentication google-api routes silex

我尝试制作一个将google api用于用户系统的网络应用程序。

实际上,我只能将我的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:

$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;
});

但是这条路线不起作用,它显示了登录的链接。我知道应用程序无法从网址获取'code',因为没有任何内容。

我还试图保持'code'这样:

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

如何让用户保持记录?

1 个答案:

答案 0 :(得分:0)

好吧,经过漫长的一夜,我找到了解决方案。

似乎127.0.0.1上的重定向与重定向到localhost不同,因此会话变量被重置。