目前我正在与 -
-
Django REST框架
-
Angular 5
-
RxJS
-
OAuth2
除了LoginComponent之外的所有组件的路径列表我都有AuthGuard,我在其中检查令牌上的数据和浏览器的localstorage中的用户 .
如果数据可用,我将返回True . 但是一旦令牌过期,我就无法对用户做任何事情 .
如果我在服务中获得401代码,我甚至无法将用户重定向到登录页面,因为我无法在服务中使用路由器 .
基本上我想知道在我的网络应用程序中更新令牌的方式,时间和地点?
请提供一些有关如何使用令牌的知识 . 如果提供任何代码示例,它也会有所帮助 .
1 回答
你的问题太广泛,而且基于意见 . 但如果你想要一个第三方的观点,这里是我的两分钱:
存储令牌
根据您的应用程序,您可以通过多种方式存储令牌 .
LocalStorage
第一个解决方案,即您使用的解决方案,将其存储在本地存储中 . 这样,只要您(或用户)没有删除令牌,令牌就会保留在设备上 .
会话存储
会话存储的行为与本地存储相同,只是一旦用户关闭会话就会删除令牌 .
服务存储
最后一个选项:将其存储在服务中:只要您的用户处于Angular范围内(即不重新加载或更改选项卡),您的令牌将保留 .
如何选择?
取决于您的申请 . 如果您在登录后创建涉及高风险的应用程序,则应考虑使用会话存储,以便用户在离开页面后立即“删除” . 对于临时应用程序,请留在本地存储中 . 如果您真的想要锁定您的应用程序,请使用服务存储 .
何时存储令牌
看起来很明显,但您应该在用户登录时存储它 .
更新令牌
你不应该这样做 . 令牌匹配用户或用户会话 . 您应该做的唯一更新是删除,而不是重写 .
更新令牌的位置
在致力于令牌管理的服务中 . 这是最佳做法 .
更多信息
你说你有一个Auth Guard . 这是一个很好的做法 . 但 yes, you can redirect the user from your service . 为什么不是要求用户连接的通常方式!在你的服务中使用路由器,真的,没有问题 .
从我的角度来看,以及你描述的内容,除了守卫中的路由,你做得很好 . 我给你的唯一建议是处理你的令牌的过期日期,如果你的应用程序是高风险的配置文件(并且你必须使用会话存储) .