我正在使用 Flask JWT-Extended 库来实现 JWT 访问令牌。当用户的令牌过期、无效或不存在时,默认情况下 Flask 返回如下 JSON:
{"msg": "Missing cookie \"access_token_cookie\""}
我想制作一个包装器,@jwt_required
但会进行内部重定向(如登录页面),而不是像上面那样返回 JSON。
这是一个示例装饰器:
def redirect_if_error(view_function):
@wraps(view_function)
def wrapper(*args, **kwargs):
jwt_data = _decode_jwt_from_request(request_type='access')
# Do custom validation here.
if 'identity' in jwt_data:
authorized = True
else:
authorized = False
if not authorized:
return redirect('login', code=302)
return view_function(*args, **kwargs)
return jwt_required(wrapper)
和一个示例页面保护页面路由,如果发生任何类型的令牌错误,我希望 Flask 将用户重定向到:
@mod.route('/')
@redirect_if_error
def home():
return render_template("index.html")
我的问题是我无法弄清楚如何使用重定向覆盖默认的 JSON 返回。如果有任何错误,则忽略逻辑而不是 wrap 函数,并输出某种错误消息。
有没有更好的方法来使用新的装饰器覆盖默认行为?