Django登录成功后无法跳转至Products页面问题排查
问题分析与修复方案
你的核心问题是用户认证流程不兼容Django自带的认证系统,导致登录后无法通过@login_required校验,被重定向回登录页。以下是具体问题和修复步骤:
1. 注册逻辑错误:密码未哈希存储,且未创建Django认证用户
你自定义了UserRegister模型,但注册时直接存储明文密码,且没有创建Django认证系统认可的User实例。Django的authenticate函数只会校验哈希后的密码,且login函数依赖Django的用户模型来维护认证状态。
修复代码(修改SignUp视图):
from django.contrib.auth.models import User # 导入Django自带User模型 def SignUp(request): if request.method == "POST": form = UserRegisterForm(request.POST) if form.is_valid(): # 使用Django自带方法创建用户,自动哈希密码 user = User.objects.create_user( username=form.cleaned_data.get('username'), email=form.cleaned_data.get('email'), password=form.cleaned_data.get('password1') ) # 可选:如果需要保留自定义UserRegister模型,关联已创建的User form_info = UserRegister( user=user, # 需要在UserRegister模型中添加ForeignKey到User username=form.cleaned_data.get('username'), email=form.cleaned_data.get('email') # 不再存储明文密码 ) form_info.save() messages.success(request, 'Your account has been created!') login(request, user) # 注册后直接登录用户 return HttpResponseRedirect('/Products') else: print("Form is not valid") print(form.errors) else: form = UserRegisterForm() return render(request, 'SignUp.html', {'form': form})
注意:如果要保留
UserRegister模型,需要给它添加一个关联Django User的外键字段:from django.contrib.auth.models import User class UserRegister(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # 其他字段...
2. Login视图存在未导入函数调用
你在Login视图中使用了get_user(request),但没有导入该函数,会导致运行时错误。
修复代码:
在views.py顶部添加导入:
from django.contrib.auth import get_user
3. URLs中logout路由指向错误
你的URL配置中path('logout',views.logout,name='logout')调用的是Django自带的logout函数,而非你自定义的Logout视图(大写L)。
修复代码:
修改urls.py中的logout路由:
path('logout',views.Logout,name='logout')
4. Login模板未传递next参数到POST请求
当前模板中仅在form的action中携带next参数,但未作为POST字段传递,导致登录后可能无法正确获取next_url。
修复代码(修改login.html表单):
在表单内添加隐藏字段传递next参数:
{% csrf_token %} <!-- 添加以下隐藏字段 --> <input type="hidden" name="next" value="{{ next }}"> <div class="input-section"> <!-- 原有表单内容 --> </div>
额外建议:
- 优先使用Django自带的用户认证系统,避免重复造轮子;若需自定义用户模型,需正确配置
AUTH_USER_MODEL。 - 检查
UserLoginForm是否继承自django.contrib.auth.forms.AuthenticationForm,确保表单逻辑正确。
内容的提问来源于stack exchange,提问作者Hardik Jain
相关产品推荐
相关产品推荐

