php - 使用 oAuth 处理多个谷歌登录用户

标签 php google-app-engine oauth google-api-php-client google-signin

我有一个使用来自 Gmail 帐户的数据的应用程序。我已经能够创建一个 php 站点来检索 oAuth token (在线和离线),然后从邮箱中检索必要的用户信息,所有这些都使用 Google php api。现在我的问题:

当次级用户在授权用户之前使用的浏览器中登录 gmail 时,凭据似乎“保留”。因此第二个(或第三个或第 n 个用户)可以看到与他们无关的数据,这也是一个安全漏洞。但最重要的是:每个登录到 gmail 的用户只能看到第一个登录用户的数据。

问题:有没有一种方法可以使用 Google PHP API 或 Google JavaScript API 来检索当前 gmail session 的用户名?

这是我用来检索用户数据的当前 php 代码段:

use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

session_start(); 

$user = UserService::getCurrentUser();
$userEmail = htmlspecialchars($user->getEmail());

这个想法是应用程序使用当前的 gmail 用户信息来查询数据库,然后检索该特定用户的数据 - 并且只检索该登录用户。如果用户未被授权,则提示授权窗口并请求权限。

欢迎提出任何想法或建议。

更新(2015 年 9 月 7 日):

我对 app.yaml 进行了更改,因此 gmail 中的每个登录用户都会收到与我的应用程序不同的 uri。那很好用。现在我面临一个新问题:如何使 PHPSESSID 和 SACSID cookie 使用特定路径而不是整个域?这样 - 理论上 - 我可以有多个登录用户,每个用户都连接到不同的子文件夹。

我已经阅读了有关 UserService 的整个文档,但似乎我所能做的就是重定向到这个:

UserService::createLoginURL($_SERVER['REQUEST_URI']);

这会负责身份验证。

问题:如何重新调整范围以便 cookie 获得适当的文件夹路径?

最佳答案

主要问题是一旦您登录到 App Engine(通过 UserService),用户 session 现在已经在您的 App Engine 应用程序中创建,因此您在 GMail 或任何其他 Google 应用程序,因为 session 已经创建,并且会保留在您的应用程序中。

App Engine 用户服务甚至在辅助登录成为可能之前就已经可用,并且此后一直没有更新。因此,在开发 API 时可能不会考虑这个用例。

关于php - 使用 oAuth 处理多个谷歌登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262814/

相关文章:

php - 如何解决 Laravel 5 中的超时错误

google-app-engine - Datanucleus gae.pk-id 未在 makePersistent 上填充

javascript - Instagram API 和在没有服务器端身份验证的情况下导入照片

java - OAuth 签名验证失败

node.js - TikTok oAuth API 授权码总是过期

php - 如何获取我的 Gmail 好友在线状态

php - Expression Engine Freemember 忘记密码表单

python - 使用祖先与 StructuredProperty 来建立实体之间的关系

java - 与 JDO 和 GAE 的多对一关系

php - Mysql - 如何查询 mysqli_multi_query() 以返回整行