Django项目如何同时实现自定义邮箱验证与Google第三方登录功能
结论
邮箱密码+邮箱验证的自定义登录体系,和Google第三方登录完全可以共存。教程中所说的二选一只针对未做适配的默认配置场景,你原有自定义登录的代码无需修改,只要新增适配配置即可实现两套登录逻辑并行。
具体实现步骤
1. 安装依赖包
安装Django生态通用的第三方登录包:
pip install django-allauth
2. 调整项目配置文件settings.py
在原有配置基础上新增以下配置,保留原有自定义认证逻辑的同时接入第三方登录能力:
INSTALLED_APPS = [ # 保留你原有所有注册的应用 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', ] SITE_ID = 1 # 认证后端配置:保留原有账号密码认证,新增第三方认证 AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend', ] # allauth适配配置,和你现有邮箱验证逻辑对齐 ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_EMAIL_VERIFICATION = "none" # Google返回的邮箱本身已通过官方验证,无需再发邮件校验 ACCOUNT_AUTHENTICATION_METHOD = "username_email" # 支持用户名/邮箱双字段登录,和你现有逻辑对齐 LOGIN_REDIRECT_URL = "profile" # 登录成功跳转地址和原有逻辑保持一致 LOGOUT_REDIRECT_URL = "login" # Google OAuth配置,替换为你在Google Cloud控制台申请的对应参数即可 SOCIALACCOUNT_PROVIDERS = { 'google': { 'SCOPE': [ 'profile', 'email', ], 'AUTH_PARAMS': { 'access_type': 'online', } } }
3. 新增第三方登录路由
在项目根urls.py中新增allauth路由,你原有自定义的注册、登录路由完全保留即可:
urlpatterns = [ # 保留你原有所有路由配置,比如自定义的/register、/login等 path('accounts/', include('allauth.urls')), # 新增第三方登录专属路由 ]
4. 适配你的邮箱验证字段逻辑
你原有User模型的is_email_verified字段需要和第三方登录逻辑对齐,Google登录的用户默认邮箱已验证,通过信号量自动设置该字段,无需额外发验证邮件:
在你的应用目录下新建signals.py,写入以下代码:
from allauth.socialaccount.signals import social_account_added from django.dispatch import receiver @receiver(social_account_added) def set_verified_for_google_user(request, sociallogin, **kwargs): user = sociallogin.user if sociallogin.account.provider == 'google': user.is_email_verified = True user.save()
然后在对应应用的apps.py中注册信号:
from django.apps import AppConfig class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = '替换为你的应用名称' def ready(self): import 替换为你的应用名称.signals
5. 前端新增登录入口
在你原有login.html页面的账号密码登录表单下方,新增Google登录按钮即可,跳转地址为{% url 'social:begin' 'google' %},两套登录入口互不影响。如果用户使用同一个邮箱先后注册了账号密码登录、使用Google登录,系统会自动关联到同一个用户,不会重复创建账号。
内容的提问来源于stack exchange,提问作者Ashof Zulkarnaen
相关产品推荐
相关产品推荐

