一尘不染

如何使用Django使用Google+ API登录?

django

我应该如何向我的Django网站添加Google+ API登录?


阅读 727

收藏
2020-04-01

共1个答案

一尘不染

首先,你必须为Google+创建OAuth凭据。

  1. 转到Google Developer Console
  2. 创建一个新项目。
  3. 转到“ API和身份验证”->“授权屏幕”,并为你的产品命名。点击“保存”。
  4. 转到“ API和身份验证”->“凭据”。在“ OAuth”下,单击“创建新的客户端ID”。添加“ http:// localhost:8000 / soc / complete / google-oauth2 / ”应作为回调URL列出。这仅适用于测试,请确保在生产中放入你的实际域。
    现在,将其添加python-social-auth到你的Django应用中。

装python-social-auth使用pip
设置适当的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')
  • 定义SOCIAL_AUTH_PIPELINE设置,如python-social-auth文档中所述。该页面列出了每种设置的作用。

如果你与从Google+获得的信息有关,建议你定义一个函数:

    def save_profile(backend, user, response, *args, **kwargs):
        if backend.name == "google-oauth2":
           # do something

这里userdjango.contrib.auth.models.User对象,response是字典。然后SOCIAL_AUTH_PIPELINE在后面使用完整的模块路径将该函数添加到create_user

如果你不希望对该信息进行任何操作,则可以保留默认管道。

最后,你需要将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 = /。

希望我没有跳过任何步骤的说明,它会起作用。随时问更多问题并阅读文档。另外,这是一个你应该检出的有效示例。

2020-04-01