Flask登录功能错误处理失效,为何判断user is None的代码不生效?
Flask登录认证错误处理问题分析
你的这段if user is None: print("Invalid Credentials")代码存在两个核心问题:
- 判断永远不会触发:这段代码被嵌套在
if user:的代码块内部,只有当user不为空(即数据库中找到了对应用户)时才会进入这个分支。此时user is None的条件永远不成立,所以这条错误提示永远不会执行。 - 错误提示无法被用户看到:就算这条判断能执行,
print()的内容只会输出到后端控制台,前端页面的用户完全看不到这个错误信息,达不到错误提示的目的。
另外你的代码还遗漏了两种错误场景的处理:
- 数据库中找不到对应用户(
user is None)的情况 - 用户存在但密码不匹配的情况
修正后的代码示例
@app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() # 初始化错误提示变量 error = None if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() if user and bcrypt.check_password_hash(user.password, form.password.data): login_user(user) return redirect(url_for('dashboard')) # 用户名不存在或密码错误,统一提示无效凭证 error = "Invalid Credentials" # 将错误变量传入模板 return render_template('login.html', form=form, error=error)
前端模板(login.html)中添加错误显示
在表单合适位置加入:
{% if error %} <div class="alert alert-danger">{{ error }}</div> {% endif %}
内容的提问来源于stack exchange,提问作者Avyukt Ballari
相关产品推荐
相关产品推荐

