【发布时间】:2020-09-19 06:08:52
【问题描述】:
我正在使用 Apollo Server 和 Apollo Client,但无法处理未经身份验证的响应。在服务器上,当发出请求并且用户未通过身份验证时,我会抛出 AuthenticationError。在客户端,在未经身份验证时执行查询/突变会向 catch 块发送一个错误,在那里我可以看到带有 "code":"UNAUTHENTICATED" 的 graphQLErrors,完全符合预期。
我想做的是在一个中心位置处理所有这些未经身份验证的响应,以便如果任何请求以未经身份验证的形式返回,我可以将用户重定向到登录页面。 apollo-link-error 的文档展示了如何使用 onError 作为错误处理程序,并提供了有关未经身份验证的响应的示例。
我在 onError 中写的代码是 if there are graphQLErrors that have the code "UNAUTHENTICATED", set "response.errors" to "undefined" and redirect to the login page。此逻辑似乎按预期工作,因为任何未经身份验证的请求都会被重定向到登录页面。
但是,如 apollo-link-error 文档的“忽略错误”部分所述,添加 response.errors = undefined 会导致所有未经身份验证的请求引发 Error writing result to store for query 错误。如果我删除 response.errors = undefined 逻辑,那么 graphQLErrors "code":"UNAUTHENTICATED" 错误最终会出现在每个未经身份验证的查询/突变的 catch 块中,这意味着我需要每个 catch 块中的逻辑来忽略该错误但显示其他错误。
我在这里做错了吗?如何使用 onErrors 捕获所有“未经身份验证”的错误,并防止它们出现在查询/变异捕获块中而没有上面列出的错误?
【问题讨论】:
-
你能展示你的实现吗?您是使用两个
onError函数还是将它们合并在一起? -
只有一个 onError。我最终解决了这个问题,并发布并回答了正在发生的事情。
标签: apollo apollo-client apollo-server