为什么我的Django自定义用户模型的注册机制无法正常工作?
问题根因
你自定义用户模型中is_active字段默认值设为False,Django官方默认的身份认证后端会校验用户激活状态,未激活用户会被直接判定为登录凭证无效,所以会弹出用户名/密码错误的提示。
而你创建的超级用户可以正常登录,是因为create_superuser方法中手动设置了is_active=True,绕过了这个限制。
解决方案
方案1(无需邮箱激活,注册即可登录)
直接修改models.py中UserModel的is_active字段默认值:
# 原代码 is_active = models.BooleanField(default=False) # 修改为 is_active = models.BooleanField(default=True)
修改完成后执行以下命令同步数据库结构:
python manage.py makemigrations python manage.py migrate
此前已注册的用户可以进入Django后台管理页,在对应用户详情页勾选is_active选项保存即可正常登录。
方案2(需要邮箱激活流程)
如果你的业务要求用户注册后需要点击邮件链接激活账号,你需要额外补充以下逻辑:
- 注册成功后生成激活令牌,向用户填写的邮箱发送带令牌的激活链接
- 新增激活接口,校验令牌有效性后将对应用户的
is_active字段设置为True - 可在登录页添加「重新发送激活邮件」入口,方便用户重新获取激活链接
内容的提问来源于stack exchange,提问作者Vijay Anand. R
相关产品推荐
相关产品推荐

