如何从烧瓶中的中间件(app.before_request())返回烧瓶响应?

时间:2019-12-30 11:15:27

标签: python flask flask-jwt-extended flask-jwt

我在应用程序中声明了一个中间件部分,在请求之前在其中执行一些代码。 在flask中,有两个装饰器,分别称为@app.before_request@app.after_request,我们可以使用它们声明一个中间商品部分。我想验证中间件中JWT令牌的身份验证。

@app.before_request
def before_request_callback():
    try:

    # Checking jwt-authentication for every request
        verify_jwt_in_request()
    except:
        #Fill this block


如果令牌有问题,那么我想捕获该异常并返回消息“无效令牌”。我不想执行更多的代码。那么如何从除块之外返回响应?

3 个答案:

答案 0 :(得分:0)

documentation中所述,您可以以与通常从Flask视图代码中完成响应相同的方式返回响应。例如:

@app.before_request
def before_request_callback():
    try:
    # Checking jwt-authentication for every request
        verify_jwt_in_request()
    except:
        return 'invalid token', 401

答案 1 :(得分:0)

了解如何解决。

@app.before_request
def before_request_callback():
    try:
        # Checking jwt-authentication for every request except login
         verify_jwt_in_request()
    except:
        return make_response(jsonify(error_dict(current_request_id(), 'Invalid token ', 401)),
                             status.HTTP_401_UNAUTHORIZED)

答案 2 :(得分:0)

对于烧瓶jwt扩展,您根本不需要捕获异常。仅使用verify_jwt_in_request()就足够了,它将调用默认的错误处理程序并返回适当的响应,以说明为什么令牌不存在或无效。您可以在此处查看默认响应并对其进行自定义:https://flask-jwt-extended.readthedocs.io/en/stable/api/#module-flask_jwt_extended