我怎样才能将Google+ API登录添加到我的Django网站?
首先,您必须为 Google+ 创建 OAuth 凭据。
- 转到谷歌开发者控制台
- 创建一个新项目。
- 转到"API 和身份验证"->"授权屏幕"并为您的产品命名。点击"保存"。
- 转到"API 和身份验证"->"凭据"。在"OAuth"下,单击"创建新的客户端 ID"。添加"http://localhost:8000/soc/complete/google-oauth2/"应作为回调 URL 列出。这仅适用于测试,请确保在生产时放入您的实际域。
现在让我们python-social-auth
添加到你的 Django 应用程序中。
- 使用
pip
安装python-social-auth
-
设置适当的 Django 设置:
- 将
'social.apps.django_app.default'
添加到INSTALLED_APPS
: - 使用之前创建的客户端密钥和机密添加
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY
和SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET
设置。客户端密钥是 Google 开发者控制台的"凭据"屏幕中列出的"客户端 ID",以".apps.googleusercontent.com"结尾。只取点前的部分。机密列为"客户端机密"。 -
确保您明确定义了
AUTHENTICATION_BACKENDS
设置,并且它包含'social.backends.google.GoogleOAuth2'
。一个例子是:AUTHENTICATION_BACKENDS = ( 'social.backends.google.GoogleOAuth2', 'django.contrib.auth.backends.ModelBackend')
-
定义 python-social-auth 文档中详述的
SOCIAL_AUTH_PIPELINE
设置。该页面中列出了每个设置的功能。
如果你与从Google+获得的信息有关,我建议定义一个函数:
def save_profile(backend, user, response, *args, **kwargs): if backend.name == "google-oauth2": # do something
其中
user
是django.contrib.auth.models.User
对象,response
是字典。然后在create_user
之后使用完整模块路径将该函数添加到SOCIAL_AUTH_PIPELINE
。如果不想对该信息执行任何操作,可以按原样保留默认管道。
- 将
最后,您需要将python-social-auth
网址添加到您网站的urlpatterns
:
from django.conf.urls import include
url("^soc/", include("social.apps.django_app.urls", namespace="social"))
这应该可以做到!是时候进行测试了。首先,./manage.py makemigrations
所需的python-social-auth
迁移,然后./manage.py migrate
,如此处所述。然后,您可以运行开发服务器,并转到 http://localhost:8000/soc/login/google-oauth2/?next=/。
希望我没有跳过解释任何步骤,它会起作用。请随时提出更多问题并阅读文档。另外,这是一个您应该查看的工作示例。
@rhaps0dy的答案是正确的,但python-social-auth
现在已被弃用并作为social-auth-app-django
迁移。这就是我与@rhaps0dy指南的不同之处。
- 我没有
python-social-auth
,而是安装了social-auth-app-django
, -
'social.apps.django_app.default'
变得'social_django'
-
'social.backends.google.GoogleOAuth2'
现在'social_core.backends.google.GoogleOAuth2'
-
url("^soc/", include("social.apps.django_app.urls", namespace="social"))
变得url("^soc/", include("social_django.urls", namespace="social"))