V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
54sword
V2EX  ›  Google

Google Oauth2 获取用户信息,遇到一个诡异的问题

  •  
  •   54sword · 2016-02-02 14:14:43 +08:00 · 2802 次点击
    这是一个创建于 3218 天前的主题,其中的信息可能已经有所发展或是发生改变。

    异常描述
    我使用帐号 A 登录授权以后,获取到帐号 A 的信息,然后退出。
    再使用另一个帐号 B 登陆授权以后,获取的信息依然是帐号 A 的信息。
    但过上一段时间(无法确定多久时间),再使用帐号 B 登陆授权,可以获取帐号 B 的信息,再退出。
    再使用帐号 A 登陆,获取的信息依然是帐号 B 的信息,这是怎么一回事情啊?

    测试地址: http://www.euask.com/oauth/google.php

    代码如下:

    <?php
    
    require_once __DIR__ .'/g/vendor/autoload.php';
    
    session_start();
    
    $client = new Google_Client();
    $client->setAuthConfigFile('client_secrets.json');
    $client->setRedirectUri('http://www.euask.com/oauth/google.php');
    $client->setScopes(array(
      'https://www.googleapis.com/auth/userinfo.email',
      'https://www.googleapis.com/auth/plus.login',
      'https://www.googleapis.com/auth/plus.me'
    ));
    // $client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
    $plus = new Google_Service_Oauth2($client);
    
    if (isset($_REQUEST['logout'])) {
      session_unset();
    }
    
    if (isset($_GET['code'])) {
      $client->authenticate($_GET['code']);
      $_SESSION['access_token'] = $client->getAccessToken();
      $redirect = 'http://www.euask.com/oauth/google.php';
      header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
    }
    
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
      $client->setAccessToken($_SESSION['access_token']);
      $me = $plus->userinfo->get();
      $id = $me['id'];
      $name = $me['givenName'];
      $email = $me['email'];
      $profile_image_url = $me['picture'];
    } else {
      $auth_url = $client->createAuthUrl();
    }
    
    ?>
    
    <div>
      <?php
        if (isset($auth_url)) {
          echo "<a href='".filter_var($auth_url, FILTER_SANITIZE_URL)."'>Google login</a>";
        } else {
          // print "ID: {$id} <br />";
          print "Name: {$name} <br />";
          print "Email: {$email} <br />";
          print "Image: {$profile_image_url} <br />";
          echo "<a href='?logout'>Sign out</a>";
        }
      ?>
    </div>
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.