【发布时间】:2022-07-04 00:42:46
【问题描述】:
我们的一些 Dash 回调涉及调用通过 OAuth 授权的外部 API(正在使用 Authlib)。当用户注销时,他们的 OAuth 令牌将从当前会话中删除。但是,如果该用户打开了另一个选项卡,则可以继续从该选项卡调用 (ReactJS) AJAX 回调,但最终将失败,因为不再有有效的令牌。
理想情况下,如果用户在回调期间不再被授权,将返回 401 响应,这会以某种方式触发浏览器重定向到 Flask 应用程序根目录(现在将检测到他们需要登录并重定向到用于登录的 OAuth 服务器)
在我的回调中,我可以包含类似于:
@dashapp.callback(
Output('some-div', 'children'),
Input('some-input', 'data')
)
def my_fancy_callback(inputdata):
if not session.get('token'):
raise SessionExpiredException
jsonResult = api.get('https://myapi.com/someinterestingdata')
return jsonResult
然后有一个 Flask 错误处理程序来捕获这个特定的异常并返回一个 401 响应:
@app.errorhandler(SessionExpiredException)
def handle_SessionExpired_exception(e):
return Response("Access Denied", 401)
这确实会导致 AJAX 调用返回 401 响应(如浏览器网络输出所示)。但是,我不确定如何在 React/Browser 方面挂钩这个调用?使用 Dash,我可以考虑添加一些自定义 JavaScript 文件,以某种方式在全局范围内拦截 XMLHttpRequest,但我想知道是否已经内置了对 Dash 的支持来完成此操作?
我对 Python/Flask/Dash/Plotly 非常陌生,所以如果有其他客户端错误处理的最佳实践,我会欢迎任何建议。
【问题讨论】:
标签: python flask error-handling plotly