【问题标题】:Implement "local" user management on GAE在 GAE 上实施“本地”用户管理
【发布时间】:2012-06-22 16:35:55
【问题描述】:

我想在 GAE 上开发一个商业应用程序。业主不知何故不喜欢或误解 OpenID 的想法,坚持实施本地用户管理:使用存储在应用程序数据存储中的登录名和密码进行注册。

我想通过使用“本地”OpenID 提供程序来实现他想要的。这似乎是最直接的方法。有没有办法“插入”现有的 OpenID 提供程序库(+登录对话框 +也许是注册工作流程)并在同一个应用程序中使用它?例如,Janrain 是否需要大量修改才能做到这一点?

如果不是这样,我可以自己创建用户实例并使用本地商店的用户名+密码吗?那么如何处理会话管理呢?

对不起,我在这件事上不是很有经验,而且从主要业务主题上被用户管理分心真的很烦人:(

【问题讨论】:

  • 随着我越来越多地思考它,我是否可能只需要编写一个简单明了的登录名/密码输入,并在成功通过身份验证后创建“未绑定”用户实例和将其电子邮件地址和“假”OpenID 设置为 federated_identity,然后继续使用它? IE。类似“user = get_current_user(); if user is None: user = google.appengine.api.users.User(email = ..., federated_identity = ...)”
  • 我对此没有太多了解。当我在探索这个相同的特性时,我得到了一个解决方案来使用 JIODS(Java Open Id Server)在 java 中创建自己的本地 openid 提供程序,参考链接:code.google.com/p/openid-server。所以尝试为此探索代码可能是你得到正确的解决方案。

标签: google-app-engine user-management openid-provider


【解决方案1】:

我认为实施“虚拟”OpenID 提供程序并不是解决问题的最佳方法。您只需将自己的 cookie/会话存储在当前登录用户的位置上。在 Google App Engine 上手动做到这一点并不容易,但幸运的是,有很多框架可以解决这个问题(gae-sessions 就是其中之一)。

我建议您查看Flask-Login,它可以与您的 Google App Engine 集成。 Flask-Login 为您提供了一个登录管理器,它通过安全会话处理所有后台工作,由您决定谁是登录用户。她是使用自定义登录名(用户名/密码)还是 OpenID 登录名登录并不重要,因为在这两种情况下,您都会有一个 User 模型来存储特定用户的额外信息。然后只需将 user_db 实体设置为登录用户。

您可以查看gae-init(免责声明:我是创建者)作为示例,了解如何使用 Flask-Login 以及其他内容,包括 Google、Facebook 和 Twitter 登录。请注意,Facebook 和 Twitter 不属于 Google 提供的联合登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多