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

Piy*_*wal 23 django oauth google-api

我如何才能在我的Django网站上添加Google+ API登录?

rha*_*0dy 80

首先,您必须为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应用程序中.

  1. 安装python-social-authpip
  2. 设置适当的Django设置:

    • 添加'social.apps.django_app.default'INSTALLED_APPS:
    • 使用您之前创建的客户端密钥和机密添加SOCIAL_AUTH_GOOGLE_OAUTH2_KEYSOCIAL_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')
      
      Run Code Online (Sandbox Code Playgroud)
    • 定义SOCIAL_AUTH_PIPELINE设置为详细蟒蛇-社会-身份验证文件.该页面中列出了每个设置的功能.

    如果您与从Google+获得的信息有关,我建议您定义一项功能:

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

    where user是一个django.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"))
Run Code Online (Sandbox Code Playgroud)

这应该做到!是时候进行测试了.首先,./manage.py makemigrations对于所需的迁移python-social-auth,然后./manage.py migrate,作为解释在这里.然后,您可以运行开发服务器,然后转到http:// localhost:8000/soc/login/google-oauth2 /?next = /.

希望我没有跳过解释任何步骤,它会工作.随意提出更多问题并阅读文档.此外,这是一个你应该检查的工作示例.

  • 另外,请确保将Google+ API添加到Google Developer Console上的已启用API列表中(在API下),否则您将获得403 (5认同)
  • 请注意,在发布此答案后的某个时刻,`python-social-auth`已更改为新的库结构; 它现在是`social-auth-core`,具有针对特定框架的专用应用程序,所以在这种情况下`social-auth-app-django`. (5认同)
  • 我已经按照所有步骤操作,它使用社交身份验证作为用户登录,但我的用户没有被创建,它只是登录,虽然我看到在表"social_auth_usersocialauth"中创建了一个新记录但是在用户表中没有创建新用户.我正在扩展AbstractBaseUser并创建我的自定义用户域.任何帮助,将不胜感激 (2认同)
  • `include` 来自 `django.conf.urls`。https://docs.djangoproject.com/en/1.10/ref/urls/ (2认同)

Geo*_*hev 42

@rhaps0dy的回答是正确的,但python-social-auth现在已被弃用并迁移为social-auth-app-django.所以这就是我与@rhaps0dy指南的不同之处.

  1. 而不是python-social-auth,我安装social-auth-app-django,
  2. 'social.apps.django_app.default''social_django'
  3. 'social.backends.google.GoogleOAuth2' 就是现在 'social_core.backends.google.GoogleOAuth2'
  4. url("^soc/", include("social.apps.django_app.urls", namespace="social"))url("^soc/", include("social_django.urls", namespace="social"))

  • 感谢分享,以前的价值观随处可见 (2认同)
  • 谢谢你们俩!非常干净的答案,它正在与乔治提到的修改一起使用 (2认同)