You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django自定义用户模型注册后无法登录问题排查求助

Django用户注册后无法登录的问题排查与修复

核心问题

你的Account模型中is_active字段默认值为False,而Django的auth.authenticate()方法默认只会验证**已激活(is_active=True)**的用户。用户注册后未被标记为激活状态,导致即使凭据正确也无法通过认证。

修复方案(任选其一即可)

方案1:在注册视图中激活用户

修改views.py中的register函数,创建用户后手动设置is_active=True并保存:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            phone_number = form.cleaned_data['phone_number']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            username = email.split('@')[0]
            user = Account.objects.create_user(
                first_name=first_name,
                last_name=last_name,
                username=username,
                email=email,
                password=password
            )
            user.phone_number = phone_number
            user.is_active = True  # 添加激活标记
            user.save()
            messages.success(request, 'Registration successful')
            return redirect('register')
    # 其余代码保持不变

方案2:修改模型默认值

在models.py的Account模型中,将is_active的默认值改为True:

class Account(AbstractBaseUser):
    # 其余字段保持不变
    is_active = models.BooleanField(default=True)  # 将默认值从False改为True

方案3:在用户管理器中默认激活普通用户

修改MyAccountManager的create_user方法,创建用户时直接设置is_active=True:

class MyAccountManager(BaseUserManager):
    def create_user(self, first_name, last_name, username, email, password=None):
        if not email:
            raise ValueError('Email is required.')

        if not username:
            raise ValueError('Username is required.')

        user = self.model(
            email=self.normalize_email(email),
            username=username,
            first_name=first_name,
            last_name=last_name,
            is_active=True  # 默认激活普通用户
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

额外验证点

  1. 确认create_user方法中正确调用了user.set_password(password),确保密码被加密存储(你的代码中已正确实现)。
  2. 检查登录视图中auth.authenticate(email=email, password=password)的参数是否匹配(你的代码中参数设置正确)。

内容的提问来源于stack exchange,提问作者Bhavin Pokal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:31:01