Django登录校验:如何判断用户存在但密码错误并返回提示
解决Django登录区分「用户不存在」和「密码错误」的问题
要精准区分这两种错误场景,核心是先单独验证用户是否存在,再对已存在的用户校验密码。修改后的代码如下:
from django.contrib.auth.models import User # 确保导入User模型 from django.contrib import auth, messages from django.shortcuts import redirect, render def signin(request): if request.user.is_authenticated: return redirect(index) if request.method == "POST": form = Signin(request.POST) if form.is_valid(): username = request.POST["username"] password = request.POST["password"] # 先检查用户是否存在 user_exists = User.objects.filter(username=username).exists() if not user_exists: messages.error(request, "用户不存在") return redirect(signin) # 用户存在时,验证密码正确性 user = User.objects.get(username=username) if user.check_password(password): auth.login(request, user) return redirect(index) else: messages.error(request, "密码不正确") return redirect(signin) else: form = Signin() return render( request, "accounts/login.html", { "form": form, }, )
关键逻辑说明
User.objects.filter(username=username).exists():通过用户名查询数据库,单独判断用户是否存在,这一步直接区分「用户不存在」的场景。user.check_password(password):Django用户模型内置的安全校验方法,会自动对比输入密码与数据库中存储的哈希密码,避免明文对比带来的安全风险,同时精准判断密码是否错误。- 拆分验证步骤后,就能分别返回对应的错误提示,不会再出现混淆。
内容的提问来源于stack exchange,提问作者Olasubomi
相关产品推荐
相关产品推荐

