我正在创建从API返回我当前用户的服务,当我的令牌不再有效时,该API将返回错误(401)未经授权。
我应该使用catchError向用户显示一条消息,然后重定向到登录页面,还是我的所有订阅者都必须捕获该错误并加以解决?
答案 0 :(得分:2)
我建议使用全局ErrorHandler
处理所有401错误。在错误处理程序中,检查错误是否为HttpErrorResponse
并检查响应状态,如果是401,请导航至登录页面。
答案 1 :(得分:0)
在这种情况下,并非完全如此。
您应该做的是定义身份验证策略。不是作为代码,而是作为策略。我通常会看到这个:
this.router.navigate(['login', { returnUrl: 'whatever'} ]);
(从激活的路由等获得正确的返回URL,以便登录组件可以在成功登录后重定向回此处)
但是,如果您处于一个丑陋的表单中间,将其全部修改,同时您的身份验证过期,该怎么办?事情只是重定向您,并破坏了这种愚蠢的复杂表单20分钟的工作?
在这种情况下,我宁愿看到一个弹出窗口说我是未经授权的,理想情况下是一个“登录”弹出窗口,如果没有,至少是一个在新标签页中打开登录表单的链接,告诉用户,他们需要登录另一个标签,然后返回此处并再次尝试保存。
现在,这显然是用例相关的,并不总是很容易处理。但这更多是关于UX的问题,然后是Angular本身。