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

如何解决树莓派Flask应用出现的Unauthorized未授权登录错误?

问题原因定位

两个报错均为代码逻辑缺失导致:

  1. TypeError报错根因
    你编写的login视图函数中,POST请求下用户名密码验证失败的分支,仅执行了flash("Invalid username or password."),没有返回任何合法响应。Flask强制要求所有视图函数必须返回响应对象,该分支无返回值就触发了此报错。
  2. Unauthorized报错根因
    代码中登录成功后跳转的目标是url_for("user", username=username),但你贴出的代码里完全没有定义对应user别名的视图函数。如果这个user视图已经额外编写且加了@login_required装饰器,还需要进一步排查session写入、签名验证逻辑是否正常。

修复方案

第一步:修复login视图的返回逻辑

在验证失败的分支补充返回登录页的逻辑,修改后的login函数代码如下:

@app.route("/", methods = ["GET", "POST"])
@app.route("/login/", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        username = request.form['username']
        password = request.form['password']

        if not (username and password):
            flash("Username or Password cannot be empty.")
            return redirect(url_for('login'))
        else:
            username = username.strip()
            password = password.strip()

        user = User.query.filter_by(username=username).first()

        if user and check_password_hash(user.password_hashed, password):
            session['logged_in'] = True
            # 建议额外把用户名存入session,方便后续业务逻辑取用户信息
            session['username'] = username
            return redirect(url_for("user", username=username))
        else:
            flash("Invalid username or password.")
            # 新增下面这行返回逻辑即可解决TypeError报错
            return redirect(url_for('login'))
    else:
        return render_template("login.html")

第二步:补充/检查user视图函数

确保你已经编写了对应别名的user视图,示例参考实现如下:

@app.route("/user/<username>")
@login_required
def user(username):
    # 此处补充你自己的LED控制页面逻辑即可
    return render_template("user.html", username=username)

额外排查项

如果完成上述修改后仍报Unauthorized,按顺序排查:

  • 确认测试用的账号是通过signup接口正常写入数据库的,没有手动修改过库内的密码哈希值
  • 检查树莓派的系统时间是否正常,时间偏差过大会导致session签名验证失败,清理浏览器缓存后重试即可
  • 确认代码中的SECRET_KEY没有被篡改,固定的SECRET_KEY修改后会导致历史session全部失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:57:04