Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

django Google OAuth


在 Django 中实现 Google OAuth 登录有几种方式,以下将为你介绍其中两种常见的方法:使用 django-allauth 和使用原生的 Django 库。这两种方法都使用 Google 的 OAuth2.0 协议进行登录。

方法一:使用 django-allauth

安装 django-allauth

在项目的虚拟环境中安装 django-allauth 包:

pip install django-allauth

添加配置

在项目的 settings.py 文件中,添加以下配置:

INSTALLED_APPS = [
    # ...
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    # ...
]

AUTHENTICATION_BACKENDS = [
    # ...
    'allauth.account.auth_backends.AuthenticationBackend',
    # ...
]

# Google OAuth配置
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'APP': {
            'client_id': 'YOUR_GOOGLE_CLIENT_ID',
            'secret': 'YOUR_GOOGLE_CLIENT_SECRET',
            'key': ''
        }
    }
}

创建 URL 路由

在项目的 urls.py 文件中,添加 allauthsocialaccount 的 URL 路由:

urlpatterns = [
    # ...
    path('accounts/', include('allauth.urls')),
    path('accounts/', include('allauth.socialaccount.urls')),
    # ...
]

创建模板

在你的登录页面模板中,添加 Google 登录按钮:

{% load socialaccount %}
<a href="{% provider_login_url 'google' %}">Login with Google</a>

获取用户信息

一旦用户通过 Google OAuth 登录,你可以通过以下方式获取用户信息:

from allauth.socialaccount.models import SocialAccount

social_account = SocialAccount.objects.get(user=request.user, provider='google')
google_uid = social_account.uid
google_email = social_account.extra_data['email']
# 其他信息...

方法二:使用原生的 Django 库

创建 Google API 项目

  • 前往 Google 开发者控制台 创建一个新的项目。
  • 在项目的"凭据"部分创建 OAuth 2.0 客户端 ID,并设置允许的重定向 URI(通常是 http://localhost:8000/auth/google/callback/ )。

安装依赖

在项目的虚拟环境中安装 google-authgoogle-auth-oauthlib 包:

pip install google-auth google-auth-oauthlib

创建视图和 URL 路由

在你的应用中创建一个视图来处理 Google OAuth 登录,然后将其添加到 URL 路由中:

from django.shortcuts import redirect
from django.urls import path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials

def google_login(request):
    # 用于构建OAuth2.0授权URL的配置
    client_id = 'YOUR_GOOGLE_CLIENT_ID'
    redirect_uri = 'http://localhost:8000/auth/google/callback/'
    scopes = ['openid', 'email', 'profile']

    # 构建授权URL
    authorization_url, state = Credentials.from_authorized_user_info(
        client_id=client_id,
        scopes=scopes,
        redirect_uri=redirect_uri
    ).authorization_url('https://accounts.google.com/o/oauth2/auth')

    return redirect(authorization_url)

def google_callback(request):
    if 'code' in request.GET:
        client_id = 'YOUR_GOOGLE_CLIENT_ID'
        client_secret = 'YOUR_GOOGLE_CLIENT_SECRET'
        redirect_uri = 'http://localhost:8000/auth/google/callback/'

        credentials = Credentials.from_authorized_user_info(
            request.GET,
            client_id=client_id,
            client_secret=client_secret,
            scopes=['openid', 'email', 'profile'],
            redirect_uri=redirect_uri
        )

        credentials.refresh(Request())
        # 使用 credentials 获取用户信息,例如 credentials.id_token 中的信息

    return redirect('/')

urlpatterns = [
    # ...
    path('auth/google/', google_login, name='google_login'),
    path('auth/google/callback/', google_callback, name='google_callback'),
    # ...
]

创建模板

在你的登录页面模板中,添加链接到 Google 登录视图的链接:

<a href="{% url 'google_login' %}">Login with Google</a>

以上两种方法都可以让你实现 Django 中的 Google OAuth 登录。你可以根据你的项目需求和喜好选择其中一种。记得替换示例代码中的 YOUR_GOOGLE_CLIENT_IDYOUR_GOOGLE_CLIENT_SECRET 为你在 Google 开发者控制台中创建的实际值。

Django是一个流行的PythonWeb框架,而GoogleAuthenticator是一种双因素身份验证工具,可以为用户账户提供额外的安 ...
mac os 中完全卸载 chrome,除了在应用程序中 chrome 扔垃圾桶外,还需要删除其相关的数据及配置等信息,本文图文并茂详细介绍 ...
当谈到Pythonweb开发框架时,Django是一个非常流行和强大的选择。MVC架构:Django使用MTV(模型、模板、视图)模式,类似 ...
Django和Flask都是用于构建Web应用程序的PythonWeb框架,但它们在设计哲学、功能和用途上有一些明显的区别。学习曲线和开发速 ...
采用了MVT的软件设计模式,即模型(Model),视图(View)和模板(Template)。这套框架是以比利时的吉普赛爵士吉他手Djang ...