Django用户注册正常但登录失败,提示凭证错误问题求助
修复Django登录失败的问题
你的注册功能能正常创建用户,但登录一直触发凭证错误,我检查代码后发现三个关键问题,逐个修复就能解决:
1. 登录视图的逻辑顺序错误
在handleLogin函数里,你先调用了login(request, user)再判断用户是否有效,这不仅会让未认证用户触发报错,还完全颠倒了登录逻辑——应该先验证凭证,确认用户有效后再执行登录操作。另外原代码没判断请求方法,GET访问登录路由会直接报错,也要补上判断。
修改后的handleLogin代码:
def handleLogin(request): if request.method == 'POST': loginusername = request.POST.get('loginusername') loginpassword = request.POST.get('loginpassword') user = authenticate(request, username=loginusername, password=loginpassword) if user is not None: login(request, user) messages.success(request, 'You are successfully logged in') return redirect('/') else: messages.error(request, 'Wrong Credential, try again') return redirect('/') else: return HttpResponse('404 Not Found')
2. 模板中用户认证状态的拼写错误
在base.html里,你写的user.is_authenticate是拼写错误,正确的属性名是is_authenticated(末尾多一个d),这个错误会导致模板一直显示登录/注册按钮,无法正确展示登录后的用户菜单。
修改后的模板片段:
{% if user.is_authenticated %} <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Welcome {{request.user}} </a> <div class="dropdown-menu" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="/logout">Logout</a> </div> </li> {% else %} <!-- 登录/注册按钮部分保持不变 --> {% endif %}
3. 登录表单的HTML语法错误
登录表单的用户名输入框里,placeholder和name属性的写法有语法问题,导致后端无法正确获取loginusername参数:
原错误代码:
<input type="text" class="form-control" id="loginusername" placeholder="loginusername name=" loginusername" required>
修改后(修正属性闭合和引号问题):
<input type="text" class="form-control" id="loginusername" placeholder="Enter your username" name="loginusername" required>
把这三个地方修复后,登录功能就能正常工作了!
内容的提问来源于stack exchange,提问作者JASIM CHOUHAN
相关产品推荐
相关产品推荐

