我有一个使用来自 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/