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



我怎样才能将Google+ API登录添加到我的Django网站?

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

  1. 转到谷歌开发者控制台
  2. 创建一个新项目。
  3. 转到"API 和身份验证"->"授权屏幕"并为您的产品命名。点击"保存"。
  4. 转到"API 和身份验证"->"凭据"。在"OAuth"下,单击"创建新的客户端 ID"。添加"http://localhost:8000/soc/complete/google-oauth2/"应作为回调 URL 列出。这仅适用于测试,请确保在生产时放入您的实际域。

现在让我们python-social-auth添加到你的 Django 应用程序中。

  1. 使用pip安装python-social-auth
  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')
      
    • 定义 python-social-auth 文档中详述的SOCIAL_AUTH_PIPELINE设置。该页面中列出了每个设置的功能。

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

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

    其中userdjango.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指南的不同之处。

  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"))

相关内容

  • 没有找到相关文章

最新更新