在Google App Engine中生成用户账户

11

对于一个项目,我将在Google App Engine上创建一个应用程序,实现以下功能:

  • 讨论组的领导者可以使用他们的电子邮件地址(或OpenID或Google帐户)在网站本身上注册使用该应用程序。
  • 在应用程序管理页面中,他们可以创建一个组讨论,并根据用户的电子邮件地址添加用户。
  • 然后这些用户应该收到生成的帐户详细信息(如果他们还没有帐户),以便他们能够使用新创建的帐户登录到该组讨论中。

我不想要求讨论领导人必须拥有Google帐户或OpenID帐户才能注册应用程序,而且所有其他用户帐户都必须由讨论领导人生成。

但是,Google App Engine似乎只支持Google帐户和OpenID帐户。我该怎么做?是否存在一种现有模式,可以在Google App Engine中创建领导者帐户并生成用户帐户,同时仍支持GAE User API?

3个回答

8

EngineAuth

几个月前,我开发了一个名为EngineAuth的Python包。它使用中间件来拦截用于身份验证的请求。

以下是一个示例应用程序:

http://engineauth.scotchmedia.com/

源代码:

https://github.com/scotch/engineauth

EngineAuth具有各种身份验证策略之一是密码。

Password需要一个密码和一个字符串(可以是电子邮件)。如果该字符串在数据存储中,则检查密码是否与存储的哈希匹配。如果匹配,则登录用户。如果该字符串不在数据存储中,则创建一个新用户。

EngineAuth还具有appengine_openid策略,允许您使用App Engine Openid登录用户。

EngineAuth的好处在于,如果您的用户已通过App Engine OpenID登录,然后使用密码登录,则它将将用户与两种策略相关联。

aeauth

然而,我对EngineAuth并不完全满意,因此我决定创建一个更依赖于webapp2的更模块化的设计。由于我现在正在使用Go开发项目,所以我从未完成过,但也许代码会有所帮助。

webapp2 auth

EngineAuthaeauth的大部分密码功能都来自于webapp2_extras/auth,这可能会给您提供一种更简单的方法。


嘿,很高兴看到你的回复。我详细调查了你的解决方案和代码,并发现将用户与多个用户配置文件连接的概念非常有趣。然而,我无法找到一种方法来使其与默认的GAE身份验证处理程序(登录:需要+/_ah/login_required+@login_required)配合使用-现在我正在查看gae-boilerplate。我会关注你的GitHub。 - mahler
使用EngineAuth - 处理 login: required 的一种方式是,如果用户已经登录为Google用户,则自动创建一个 appengine_openid user_profile。或者,您可以创建一个 login_require 装饰器来检查 request.user 的存在并使用它。 - Kyle Finley

4
GAE的User API仅提供当前登录用户及其某些属性。您必须在数据存储中存储此信息,比如在User模型中。
从那里开始,您可以根据电子邮件创建和存储用户,以及确定如何对这些用户进行分组等等,实现您想要的业务逻辑。
为了支持OAuth登录,例如FacebookTwitter,您需要使用它们自己的API来验证这些服务的用户(注册密钥、请求权限等)。幸运的是,有许多框架可以解决这个问题,但这取决于您的结构和当前使用的内容。
(免责声明为作者所属)由于您只是创建一个新应用程序,因此您可以查看gae-init项目,该项目基本上是您的新应用程序的起点,其中已经包含了GoogleFacebookTwitter登录,并将它们存储在数据存储中,用户可以更改其属性。不过,您必须已经熟悉GAE。

3
如果您不想要求使用Google帐户或OpenID帐户,则必须自己创建帐户系统。这样可以获得最大的自由度,但需要付出很多工作,并且需要对密码安全负责(疼)。个人建议您重新考虑此要求--特别是OpenID具有很多优点(除非我理解错了,使用Facebook并不那么简单)。

感谢您的回复,我非常同意您关于将账户系统外部化的优势。我的一个想法是使用OpenID提供商创建帐户并从我的应用程序内部调用其API,但我尚未找到具有此功能的OpenID提供商。 - mahler
可能是因为自动创建账户是大规模垃圾邮件和欺诈的途径。 - Guido van Rossum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接