【问题标题】:Dart gRPC response interceptorDart gRPC 响应拦截器
【发布时间】:2023-01-22 17:46:10
【问题描述】:
我有一个 Flutter 应用程序,它通过 gRPC 连接到我的后端。对后端的未经授权的请求会导致 gRPC 错误 16(未经身份验证)。每当请求导致 gRPC 错误 16 时,我想将我的应用程序用户重定向到登录页面。自然地,在用户登录后,我希望重新发送原始请求。
我可以通过等待的回应来实现代码中的每个请求并检查错误 16,但这会很乏味。我感兴趣的是一个 gRPC 响应拦截器,我可以将其添加到我的 gRPC 存根中。
经过研究,我遗憾地得出结论,唯一可用的拦截器是ClientInterceptor,它只在请求发送之前拦截它们。
真的没有办法拦截响应还是我遗漏了什么?有没有更好的方法来彻底解决问题?
【问题讨论】:
标签:
flutter
dart
routes
grpc
interceptor
【解决方案1】:
听起来您正在寻找一种方法来拦截 Flutter 应用程序中的 gRPC 响应并处理错误 16(未经验证) 通过将用户重定向到登录页面。
实现此目的的一种方法是在服务器端使用 gRPC 拦截器,它可以在响应发送回客户端之前拦截响应。此拦截器可以检查错误 16,如果存在,则将自定义标头或元数据添加到响应中,指示用户需要重定向到登录页面。
在客户端,您可以使用 ClientInterceptor 拦截响应并检查自定义标头或元数据。如果存在,您可以将用户重定向到登录页面。用户登录后,您可以重新发送原始请求。
另一种方法可能是使用 ClientInterceptor 来捕获未经身份验证的请求的错误,并抛出一个您可以在代码中处理的异常。这样,您可以将所有未经身份验证的请求处理集中在一个地方,并且您不必在您发出的每个请求中检查错误。
总之,虽然 gRPC 没有对响应拦截器的内置支持,但您可以结合使用服务器端拦截器和客户端拦截器来在您的 Flutter 应用程序中实现所需的行为。第二种方法可能是一种更优雅和可维护的解决方案,但第一种方法可能更有效