如果使用 Flask-jwt-extended 在请求中未显示 jwt,如何重定向

How to redirect if jwt is not presented in the request using Flask-jwt-extended

如果用户没有使用 JWT 或使用了错误的 JWT,是否有一种内置的方法可以重定向到登录页面?

@api.route('/private', methods=['GET'])
@jwt_required()
def protected():
  logged = get_jwt_identity()
  return jsonify(logged_in=logged), 200

最简单的解决方案可能是通过 unauthorized_loader 更改不存在令牌时的行为。类似于:

@jwt.unauthorized_loader
def custom_unauthorized_response(_err):
    return redirect(url_for('login'))

如果您需要更细粒度的控制,可以将 before_requestverify_jwt_in_request() 结合使用。或者创建您自己的自定义装饰器,例如:

def jwt_or_redirect():
    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            verify_jwt_in_request(optional=True)
            if not get_jwt_identity():
                return redirect(url_for('login'))
            else:
                return fn(*args, **kwargs)

        return decorator

    return wrapper