我想让我网站的访问者能够使用他们的 Google 帐户登录,而不必注册并创建一个新帐户。
一些事情:
- 我没有使用 Django 身份验证框架,而是自己进行身份验证并将有关用户的信息保存在我自己的一组表中
- 因此,各种 django-openid 库都不适用,因为它们都假定使用标准的 Django 身份验证框架。
我试图研究 python-openid 库 + 谷歌联合登录 API,但我迷路了。我尽可能了解实例化 Consumer 类,但不了解所需的 session 和存储参数。我无法理解看似如此简单的事情会如此复杂。真的没有关于如何在纯 python 或 django 中执行此操作的分步教程吗?
我试图查看 python-openid 中的 examples/consumer.py,但它又是 500 行代码,我不明白。
我也不明白如何根据谷歌帐户对我网站的每个请求进行用户验证。 Google API 仅说明初始登录步骤。在必须针对 Google 服务器验证身份验证的情况下,对我网站的每个请求都会发生什么情况?
最佳答案
我认为您的问题源于对 OpenID 和/或 OAuth 工作方式的基本误解。
看起来您只需要身份验证,所以让我们暂时使用 OpenID。查看现有库是正确的。如果您只需要 OpenID 而不需要 OAuth,并且您没有使用 Django 的内置身份验证框架,则可以使用 python-openid。
使用 OpenID 和 OAuth 进行联合登录的完整文档位于此处:http://code.google.com/apis/accounts/docs/OpenID.html .特别是,请查看“交互顺序”下的图表。
首先,这是来自 Facebook 的 Tornado 网络服务器的 auth 模块的一个非常好的工作示例:
https://github.com/facebook/tornado/blob/master/tornado/auth.py (grep 为“GoogleHandler”。我用它取得了巨大的成功。) 这独立于 Django 和 Django auth,应该给你一个很好的例子来说明如何实现你想要的。如果这还不够,请继续阅读...
你说 django-openid 是无关紧要的,但事实上它演示了你想要的实现,但用于 Django 的身份验证系统而不是你的。其实,你应该看看类似的插件,Django-SocialAuth ,它为一些不同的提供商(Google、Facebook、Twitter 等)实现了 OpenID + OAuth。特别是,请看:
https://github.com/agiliq/Django-Socialauth/blob/master/socialauth/lib/oauthgoogle.py 和 https://github.com/agiliq/Django-Socialauth/tree/master/openid_consumer 和 https://github.com/agiliq/Django-Socialauth/tree/master/example_project
...有关使用 django 的身份验证框架的完整工作示例,并且可以适应您的自定义身份验证框架。
祝你好运。我鼓励您记录任何最终对您有用的内容,并为像您这样的其他人构建一个循序渐进的指南。
关于python - Django + Google 联合登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307677/