HttpInterceptor和AuthGuard互相阻塞

时间:2018-03-30 20:28:24

标签: angular architecture

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

我创建了:

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

我的用例是:

  1. 用户尝试直接加载具有受限授权的页面
  2. 后卫加载UserService以验证用户是否已登录
  3. UserService进行http调用
  4. HttpInterceptor获取请求,因为localStrorage中没有令牌,它没有取得令牌
  5. 后面因为没有令牌发送401
  6. 拦截器拦截响应捕获401并返回null
  7. 当响应变为null时,它永远不会回到UserService,它不允许Guard解析路由(然后在401拦截器中进行的导航不会被调用)
  8. 完整代码,here is the complete GitHub repo以及更精确地:

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

0 个答案:

没有答案