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

如何在Flask的@app.before_request中间件中返回响应?

在Flask的before_request中间件中处理JWT验证失败并返回响应

嘿,这个需求我之前做API开发的时候刚好碰到过,其实Flask已经帮我们考虑好了这种场景——只要在before_request的异常块里返回一个响应对象(或者能被Flask转换成响应的内容),就会直接终止后续代码执行,把这个响应返回给客户端。

给你两种常用的实现方式,你可以根据自己的API风格选择:

方式1:返回简单文本响应(适合快速测试)

from flask import Flask, make_response
from flask_jwt_extended import verify_jwt_in_request, InvalidTokenError

app = Flask(__name__)

@app.before_request
def before_request_callback():
    try:
        # 验证请求中的JWT令牌
        verify_jwt_in_request()
    except InvalidTokenError:
        # 令牌验证失败时,返回'invalid token'并设置401未授权状态码
        response = make_response('invalid token')
        response.status_code = 401
        return response

方式2:返回JSON格式响应(更符合REST API规范)

如果你的API统一返回JSON格式,推荐用这种方式,前端处理错误信息会更方便:

from flask import Flask, jsonify
from flask_jwt_extended import verify_jwt_in_request, InvalidTokenError

app = Flask(__name__)

@app.before_request
def before_request_callback():
    try:
        verify_jwt_in_request()
    except InvalidTokenError:
        # 返回JSON格式的错误提示,同时设置401状态码
        return jsonify({"message": "invalid token"}), 401

关键细节提醒:

  • Flask的before_request装饰的函数,只要返回了响应对象/字符串/状态码元组,Flask就会跳过后续的视图函数和其他中间件,直接把这个响应返回给客户端,完美实现你“终止后续代码执行”的需求。
  • 尽量不要用except:捕获所有异常,最好捕获JWT库提供的具体异常(比如Flask-JWT-Extended的InvalidTokenError),这样不会把其他无关异常(比如数据库连接错误)误判为令牌问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:26