2

是否可以强制谷歌为单个用户只创建一个会话?

我在 GAE 中创建了使用 google id 对用户进行身份验证的服务。现在单个用户通过共享他的用户名/密码从多台 PC 创建多个会话。我想限制这一点。

成功登录后,应用程序应以简单的语言注销该用户的所有其他会话。

在 gmail 中,页面底部有一个链接,名称为最后一个活动详细信息。单击详细信息时,它会显示当前会话,并提供注销其他会话的选项。我想要以编程方式实现相同的功能。

还有一种选择:在登录之前检测用户是否已经登录?

看看这个

http://mail.google.com/support/bin/answer.py?ctx=%67mail&answer=45938

并发会话

如果可以以某种方式访问​​此信息,我可以采取适当的措施。

4

2 回答 2

3

这当然是可能的。

如果您使用 Google 帐户进行身份验证,则用户通过将其凭据发布到 Google 来登录,Google 会向您的站点返回一个身份验证令牌,然后将其作为 cookie 存储在用户的浏览器中。在 cookie 过期(默认为 24​​ 小时)或用户注销之前,令牌都是有效的。

如果要跟踪多个登录会话,可以编写设计为在登录或注销后运行的处理程序。如果您的正常登录后返回 URL 是“/do_stuff”,您可以将其更改为“/finish_login?next=%2Fdo_stuff”。在该处理程序中,您可以在表示会话的数据存储中创建一个实体,并引用 Google 帐户、登录的 IP 地址和登录时间戳(当前时间戳)。您可以将会话实体密钥写入用户浏览器中的另一个 cookie。完成后,重定向到“下一个”URL。

注销后,您可以使用类似的处理程序来检查会话实体密钥 cookie、删除实体并删除 cookie。

如果您想向用户显示他们是从多个位置登录的,请查询与其 Google 帐户关联的会话实体,这些实体的历史时间少于 24 小时(或任何您的 cookie 到期时间设置)。

如果您想远程注销另一个会话,您可能需要编写自己版本的 login_required 装饰器,该装饰器是 Google 在 webapp.util 中提供的。您的版本需要验证用户是否已登录,验证是否发送了会话密钥 cookie,并验证关联实体是否仍然存在并且由正确的帐户拥有。

于 2010-06-02T15:39:18.513 回答
2

没有什么可以阻止您将登录详细信息存储在 Google App Engine 数据服务中。因此,您可以将用户的所有登录详细信息存储在其关联对象中。因此,我想说 GAE 和传统的 Web 应用程序之间没有区别——除了您将登录信息存储在数据库中,而不是让您的 Web 前端处理它。

于 2010-06-02T12:35:01.243 回答