如何配置Django-allAuth的Google OAuth2仅允许企业邮箱登录
实现企业域名邮箱限制登录方案
步骤1:修改settings.py配置
首先在配置文件中添加允许登录的邮箱域名列表,同时指定自定义的社交账号适配器路径,你可以删除原配置中SOCIAL_AUTH_PIPELINE和SOCIAL_AUTH_DISCONNECT_PIPELINE两个配置项,这是python-social-auth库的配置,你当前使用的是django-allauth认证体系,不需要这两项配置。
修改后的相关配置如下:
INSTALLED_APPS = [ 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', # 你的其他应用 ] # 新增:允许登录的企业邮箱域名列表 ALLOWED_EMAIL_DOMAINS = ['example.com', 'xyzcompany.com', 'abccompany.com'] # 新增:指定自定义的社交账号适配器路径,请替换为你实际存放适配器的应用路径 SOCIALACCOUNT_ADAPTER = 'users.adapters.GoogleSocialAccountAdapter' AUTHENTICATION_BACKENDS = [ 'allauth.account.auth_backends.AuthenticationBackend', ] SOCIALACCOUNT_PROVIDERS = { 'google': { 'SCOPE': [ 'profile', 'email', ], 'AUTH_PARAMS': { 'access_type': 'online', } } } SITE_ID = 1 LOGIN_REDIRECT_URL = '/' LOGOUT_REDIRECT_URL = '/'
步骤2:创建自定义社交账号适配器
在你的Django应用(比如名为users或者common的公共应用)下新建adapters.py文件,写入以下代码:
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter from django.core.exceptions import PermissionDenied from django.conf import settings class GoogleSocialAccountAdapter(DefaultSocialAccountAdapter): def pre_social_login(self, request, sociallogin): # 仅校验谷歌OAuth登录的账号 if sociallogin.account.provider != 'google': return # 提取OAuth返回的邮箱信息 email = sociallogin.account.extra_data.get('email', '').lower() if not email: raise PermissionDenied('无法获取邮箱信息,登录失败') # 拆分获取邮箱域名 domain = email.split('@')[-1] # 校验域名是否在允许列表 if domain not in settings.ALLOWED_EMAIL_DOMAINS: raise PermissionDenied('仅允许企业域名邮箱登录,请勿使用个人Gmail账号')
步骤3:验证效果
重启Django服务后即可生效:个人Gmail账号登录时会直接被拦截返回403错误,只有你配置的企业域名邮箱可以正常完成登录流程。你也可以自定义项目的403页面,给用户更友好的错误提示。
内容的提问来源于stack exchange,提问作者Akash Rathor
相关产品推荐
相关产品推荐

