You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask框架LoginForm登录表单提交后无跳转、停留在原页问题求助

Flask登录提交后停留原页面问题修复方案

核心问题定位

从服务端日志可以看到登录请求为GET类型,参数直接拼接在URL中,这是导致验证逻辑不触发的直接原因:
Flask-WTF的form.validate_on_submit()方法仅对POST请求做表单校验,GET请求会直接跳过校验逻辑,返回登录页渲染结果,所以出现停留在原页面的现象。

具体问题及修复步骤

1. 前端表单提交方式错误

你当前login.html中的<form>标签未指定method属性,浏览器默认用GET方式提交表单。
修复:修改login.html的表单配置:

<form method="POST">
    {{ form.hidden_tag() }}
    {{ form.username() }}
    {{ form.password() }}
    {{ form.submit() }}
</form>

如果需要开启CSRF校验,直接删除登录视图中meta={'csrf': False}的配置即可。

2. 密码验证函数调用错误

登录视图中你调用了未定义的check_password函数,你导入的密码校验方法名为check_password_hash,也可以直接调用User类内置的校验方法。
修复:修改login视图中的密码校验逻辑:

# 将原代码if check_password(user.password, form.password.data):替换为以下任意一种
# 方式1:调用User实例自带方法
if user.check_password(form.password.data):
# 方式2:调用导入的werkzeug方法
# if check_password_hash(user.password, form.password.data):

3. Flask-Login用户主键不匹配

你的User模型主键命名为id_user,而Flask-Login的UserMixin默认读取id属性作为用户唯一标识,登录成功后也会出现鉴权错误。
修复:在User类中添加get_id方法重写默认逻辑:

class User(db.Model, UserMixin):
    id_user = db.Column(db.Integer, primary_key=True)
    # 其余原有字段不变
    def get_id(self):
        return str(self.id_user)

4. User类权限方法逻辑错误

你当前User类中is_anonymous返回True,会导致登录后的用户被识别为匿名用户;is_authenticated直接返回True,和字段逻辑不匹配,同步修改如下:

def is_authenticated(self):      
    return self.authenticated

def is_anonymous(self):        
    return False

修复以上问题后登录功能即可正常运行。

内容的提问来源于stack exchange,提问作者AlexC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:03