在 Django 中实现 Google OAuth 登录有几种方式,以下将为你介绍其中两种常见的方法:使用 django-allauth
和使用原生的 Django 库。这两种方法都使用 Google 的 OAuth2.0 协议进行登录。
安装 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
文件中,添加 allauth
和 socialaccount
的 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']
# 其他信息...
创建 Google API 项目
http://localhost:8000/auth/google/callback/
)。安装依赖
在项目的虚拟环境中安装 google-auth
和 google-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_ID
和 YOUR_GOOGLE_CLIENT_SECRET
为你在 Google 开发者控制台中创建的实际值。