使用oAuth处理多个Google登录用户

时间:2015-03-25 17:44:06

标签: php google-app-engine oauth google-api-php-client google-login

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

当辅助用户在以前由授权用户使用的浏览器中登录gmail时,凭据似乎“停留”。所以第二个(或第三个或第n个用户)可以看到与它们无关的数据,这也是一个安全漏洞。但最重要的是:用户进入gmail的每个人只能看到第一个登录用户的数据。

问题:我有没有办法使用Google PHP API或Google JavaScript API来检索当前gmail会话的用户名?

这是我用来检索用户数据的当前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获得适当的文件夹路径?

1 个答案:

答案 0 :(得分:1)

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

App Engine UserService在辅助登录甚至可能之前可用,并且从那时起就没有更新过。因此,当开发API时,这个用例可能不是一个考虑因素。