如果出现错误,Angular Service是否应更改路线?

时间:2018-10-26 12:10:07

标签: angular

我正在创建从API返回我当前用户的服务,当我的令牌不再有效时,该API将返回错误(401)未经授权。

我应该使用catchError向用户显示一条消息,然后重定向到登录页面,还是我的所有订阅者都必须捕获该错误并加以解决?

2 个答案:

答案 0 :(得分:2)

我建议使用全局ErrorHandler处理所有401错误。在错误处理程序中,检查错误是否为HttpErrorResponse并检查响应状态,如果是401,请导航至登录页面。

答案 1 :(得分:0)

在这种情况下,并非完全如此。

您应该做的是定义身份验证策略。不是作为代码,而是作为策略。我通常会看到这个:

  • 一般而言,任何HTTP错误都可能需要Toast通知或弹出式窗口,提示存在错误。
  • 关于400个错误:返回错误。此处不重定向。该组件可能需要突出显示血腥形式的错误。
  • 401/403(未经身份验证/未经授权):简单的解决方案是重定向至以下内容:

this.router.navigate(['login', { returnUrl: 'whatever'} ]);

(从激活的路由等获得正确的返回URL,以便登录组件可以在成功登录后重定向回此处)

但是,如果您处于一个丑陋的表单中间,将其全部修改,同时您的身份验证过期,该怎么办?事情只是重定向您,并破坏了这种愚蠢的复杂表单20分钟的工作?

在这种情况下,我宁愿看到一个弹出窗口说我是未经授权的,理想情况下是一个“登录”弹出窗口,如果没有,至少是一个在新标签页中打开登录表单的链接,告诉用户,他们需要登录另一个标签,然后返回此处并再次尝试保存。

现在,这显然是用例相关的,并不总是很容易处理。但这更多是关于UX的问题,然后是Angular本身。