【发布时间】:2021-10-27 12:15:58
【问题描述】:
我正在构建一个烧瓶 webapp,并且我试图返回自定义错误消息,以防出现 401 错误,该错误在缺少 auth 标头时引发。对于身份验证,我使用 Flask-Jwt-Extended。我想覆盖 expired_token_loader(callback) 以返回 401 错误,然后使用 @app.errohandler(401) 捕获它并重定向到登录。
到目前为止,我已经这样做了:
@jwt.unauthorized_loader
def unauthorized_callback(callback):
# Missing auth header
# abort(401)
return make_response("", 401)
@app.errorhandler(401)
def unauthorized(e):
return "Custom 401 Error", 401
在官方 Flask-JWT-Extended 文档中发现用@jwt.unauthorized_loader 装饰的函数必须返回一个 Flask 响应。
因此,当我尝试abort(401) 如上所示并且不从unaturhorized_callback() 返回任何内容时,它显示werkzeug.exceptions.Unauthorized: 401 Unauthorized: ...
当我return make_response("", 401) 显示这个时,这意味着错误处理程序没有处理错误:
编辑:我正在尝试重定向 @jwt.unauthorized_loader 的触发器,所以我想抛出一个 401 错误,然后用例如 @app.errorhandler(401) 捕获它并重定向。
我这样做是因为我还在构建一个 移动应用程序,我在其中遇到 401 错误,当我在 @jwt.unauthorized_loader 内重定向时,它始终是错误 302,否则重定向将不起作用.所以我不能做make_response(redirect("/login"), 401)。 所以我的目标是抛出 401 错误,然后在网络应用和移动应用中以不同的方式处理它。谢谢你的帮助。
【问题讨论】:
标签: python flask werkzeug flask-jwt-extended