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

php中文网
发布: 2016-06-06 20:18:12
原创
1943人浏览过

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

必剪Studio
必剪Studio

Bilibili发布的免费AI数字分身定制和视频创作工具

必剪Studio 183
查看详情 必剪Studio

测试地址: 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>
登录后复制

回复内容:

异常描述
我使用帐号 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>
登录后复制
相关标签:
php
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号