HttpInterceptor 和 AuthGuard 互相阻塞

Ale*_*RKO 6 architecture angular

我设计的授权系统很差。我需要建议来纠正一些错误。

我创建 :

  • 一个 HttpInterceptor 到:
    • 在每个请求的标头中设置 JWT 令牌(它保存在 localStorage 中)
    • 从响应中检索和更新 JWT 令牌(每个授权请求在标头响应中发回更新的令牌)
    • 出现 401 错误时,将用户重定向到登录页面
  • AuthGuard 用于:
    • 把它放在某个路线上
    • 如果没有重定向到登录页面,检查用户是否被授权
  • 一个用户服务:
    • 在 BehaviorSubject 中保留当前用户
    • 如果 JWT 令牌存储在 localStorage 中,请尝试刷新当前用户

我的用例是:

  1. 用户尝试直接加载具有受限授权的页面
  2. 保护负载 UserService 以验证用户是否已登录
  3. UserService 进行 http 调用
  4. HttpInterceptor 获取请求,因为localStorage 中没有令牌,它不接受令牌
  5. 后面因为没有令牌发送 401
  6. 拦截器拦截响应捕获 401 并返回空值
  7. 当响应变成空​​值时,它永远不会返回不允许 Guard 解析路由的 UserService(然后在 401 拦截器中进行的导航将永远不会被调用)

对于完整的代码,这里是完整的 GitHub 存储库,更准确地说:

如何让拦截器返回空响应而不是空响应?我想这足以解决问题。或者我应该做一个完全不同的模式?