django allauth中ACCOUNT_UNIQUE_EMAIL无法阻止重复邮箱注册问题
问题:重复邮箱注册未被拦截,ACCOUNT_UNIQUE_EMAIL=True配置无效
我正在开发一个基础网站,用户通过邮箱、用户名和密码完成注册。使用dj_rest_auth封装allauth提供REST API接口,注册请求示例如下:
POST: http://127.0.0.1:8000/api/auth/registration/ Body: { "username": "new_user3", "password1": "testtest@123", "password2": "testtest@123", "email": "h@h.com" }
在settings.py中配置了以下参数:
ACCOUNT_EMAIL_VERIFICATION = 'none' ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_USERNAME_REQUIRED = True ACCOUNT_UNIQUE_EMAIL = True
但仅修改用户名、使用同一邮箱重复发送注册请求时,请求仍能成功(存在两个不同用户使用同一邮箱的情况)。需要找到最简单的方法让重复邮箱的注册请求失败,优先使用库本身提供的功能,而非自定义类。
解决方案
问题根源在于:ACCOUNT_UNIQUE_EMAIL配置本身依赖于用户模型中邮箱字段的唯一性约束,而默认Django用户模型的email字段并没有设为唯一。不过无需修改用户模型,只需添加allauth的内置配置即可解决:
在settings.py中添加以下配置:
ACCOUNT_AUTHENTICATION_METHOD = 'email'
这个配置会让allauth将邮箱作为用户的登录凭证,同时自动触发邮箱唯一性校验——当使用已注册的邮箱提交注册请求时,接口会返回400错误,并提示邮箱已被占用。
如果使用的是自定义用户模型,需要确保模型中的email字段设置了unique=True,但对于默认用户模型,添加上述配置就足以实现重复邮箱注册拦截的需求。
内容的提问来源于stack exchange,提问作者Ashkan Arabi
相关产品推荐
相关产品推荐

