我很难设计我的授权系统。我需要建议纠正一些错误。
我创建了:
- 一个HttpInterceptor:
- 在每个请求的标题中设置JWT标记(它保存在localStorage中)
- 从响应中检索和更新JWT令牌(每个授权请求在标头响应中发回更新的令牌)
- 关于401错误,将用户重定向到登录页面
- AuthGuard:
- 把它放在某条路上
- 检查用户是否获得授权,如果没有重定向到登录页面
- 一个UserService:
- 将BehaviorSubject保留为当前用户
- 如果JWT令牌存储在localStorage中,则尝试刷新当前用户
我的用例是:
- 用户尝试直接加载具有受限授权的页面
- 后卫加载UserService以验证用户是否已登录
- UserService进行http调用
- HttpInterceptor获取请求,因为localStrorage中没有令牌,它没有取得令牌
- 后面因为没有令牌发送401
- 拦截器拦截响应捕获401并返回null
- 当响应变为null时,它永远不会回到UserService,它不允许Guard解析路由(然后在401拦截器中进行的导航不会被调用)
醇>
完整代码,here is the complete GitHub repo以及更精确地:
如何使拦截器返回空响应而不是null?我想这足以解决问题。
或者我应该做一个完全不同的模式?