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
额外验证点
- 确认
create_user方法中正确调用了user.set_password(password),确保密码被加密存储(你的代码中已正确实现)。 - 检查登录视图中
auth.authenticate(email=email, password=password)的参数是否匹配(你的代码中参数设置正确)。
内容的提问来源于stack exchange,提问作者Bhavin Pokal
相关产品推荐
相关产品推荐

