问题 在Google App Engine中生成用户帐户


对于项目,我将在Google App Engine上创建一个应用程序,其中:

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

我不希望讨论领导者拥有Google帐户或OpenID帐户以注册该应用程序,并且所有用户的其他帐户必须由讨论负责人生成。

但Google App Engine似乎只支持Google帐户和OpenID帐户。我怎么会这样呢?是否存在用于在Google App Engine中创建领导者帐户和生成用户帐户的现有模式,该模式仍然支持GAE用户API?


11990
2018-06-18 13:19


起源



答案:


EngineAuth

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

这是一个示例应用程序:

http://engineauth.scotchmedia.com/

来源:

https://github.com/scotch/engineauth

EngineAuth 有各种身份验证策略。其中一个是密码。

密码 获取密码和字符串(可能是电子邮件)。如果字符串位于数据存储区中,则会根据存储的哈希检查密码。如果匹配则将用户登录。如果该字符串不在数据存储区中,则会创建新用户。

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

好的事情 EngineAuth 如果您的用户登录App Engine OpenID然后他们使用密码登录,它会将用户与两种策略相关联。

aeauth

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

webapp2 auth

很多密码功能 EngineAuth 和 aeauth 取自webapp2_extras / auth,可能会给你一个简单的方法。


8
2018-06-18 17:28



嘿,很高兴看到您的回复,因为我实际上非常详细地调查了您的解决方案和代码,并发现这是一个非常有趣的概念,即将用户加入多个UserProfile。但是,我找不到使用默认GAE身份验证处理程序的方法(登录:required + / _ah / login_required + @login_required) - 现在我正在查看 GAE-样板。我会留意你的GitHub。 - mahler
使用EngineAuth - 一种处理方式 login: required 将自动创建一个 appengine_openid  user_profile 如果用户以Google用户身份登录。或者你可以创建一个 login_require 检查礼物的装饰者 request.user 并使用它代替。 - Kyle Finley


答案:


EngineAuth

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

这是一个示例应用程序:

http://engineauth.scotchmedia.com/

来源:

https://github.com/scotch/engineauth

EngineAuth 有各种身份验证策略。其中一个是密码。

密码 获取密码和字符串(可能是电子邮件)。如果字符串位于数据存储区中,则会根据存储的哈希检查密码。如果匹配则将用户登录。如果该字符串不在数据存储区中,则会创建新用户。

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

好的事情 EngineAuth 如果您的用户登录App Engine OpenID然后他们使用密码登录,它会将用户与两种策略相关联。

aeauth

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

webapp2 auth

很多密码功能 EngineAuth 和 aeauth 取自webapp2_extras / auth,可能会给你一个简单的方法。


8
2018-06-18 17:28



嘿,很高兴看到您的回复,因为我实际上非常详细地调查了您的解决方案和代码,并发现这是一个非常有趣的概念,即将用户加入多个UserProfile。但是,我找不到使用默认GAE身份验证处理程序的方法(登录:required + / _ah / login_required + @login_required) - 现在我正在查看 GAE-样板。我会留意你的GitHub。 - mahler
使用EngineAuth - 一种处理方式 login: required 将自动创建一个 appengine_openid  user_profile 如果用户以Google用户身份登录。或者你可以创建一个 login_require 检查礼物的装饰者 request.user 并使用它代替。 - Kyle Finley


GAE User API 只是为您提供当前登录的用户和他的一些属性。无论如何,您必须将这些信息存储在数据存储区中,比如说 User 模型。

从那里,您可以根据业务逻辑做任何事情,以及如何根据电子邮件存储/创建用户,如何对这些用户进行分组,如何对这些用户进行分组等。

为了支持 OAuth 登录,就像 Facebook 要么 Twitter,您将不得不使用自己的API来了解如何从这些服务验证用户(注册密钥,请求权限等)。幸运的是,有很多框架可以解决这个问题,但这取决于你的结构和你目前使用的是什么。

(免责声明,这是我的)因为你刚刚创建一个新的应用程序,你可以看看 GAE-INIT 项目,它基本上是您的新应用程序的起点 GoogleFacebook 和 Twitter 登录并将它们存储在数据存储区中,以便更改其属性。你必须已经熟悉GAE了。


4
2018-06-18 13:57





如果您不想要Google帐户或OpenID帐户,则必须推出自己的帐户系统。这为您提供了最大的自由度,但这需要大量的工作,并使您负责密码安全(ouch)。就个人而言,我建议你重新考虑这个要求 - OpenID尤其有很多用途(除了IIUC,使用Facebook并不是那么简单)。


3
2018-06-19 02:57



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