如何、在何处以及何时刷新 Angular 2/5 应用程序中的令牌?

How, where and when to refresh the token in the Angular 2/5 app?

目前我正在使用 -

除 LoginComponent 之外的所有组件的路径列表我有 AuthGuard,我在其中检查令牌上的数据和用户是否在浏览器的本地存储中。

如果有可用数据,我会 return 是的。但是一旦令牌过期,我就无法对用户做任何事情。

如果我在服务中收到 401 代码,我什至无法将用户重定向到登录页面,因为我无法在服务中使用路由器。

基本上我想知道如何、何时以及在何处更新我的网络应用程序中的令牌?

请提供一些有关如何使用令牌的知识。如果提供任何代码示例也会有所帮助。

您的问题过于宽泛,并且基于个人观点。但如果你想要第三方的观点,这是我的两分钱:

存储令牌

根据您的应用程序,您有多种存储令牌的方法。

本地存储

您使用的第一个解决方案是将其存储在本地存储中。这样,只要您(或用户)不删除令牌,令牌就会保留在设备上。

会话存储

会话存储的行为与本地存储相同,只是令牌将在用户关闭会话后被删除。

服务存储

最后一个选项:将其存储在服务中:只要您的用户停留在 Angular 的范围内,您的令牌就会保留(意思是,不重新加载或更改选项卡)。

如何选择?

取决于您的应用。如果你做一个登录后的高风险应用,那么你应该考虑使用session存储,让用户一离开页面就被“移除”。对于临时应用程序,请保留在本地存储中。如果您真的想锁定您的应用程序,请使用服务存储。

何时存储令牌

看起来很明显,但您应该在用户登录时存储它。

更新令牌

你不应该那样做。 Token 匹配用户或用户会话。您应该做的唯一更新是删除,而不是重写。

在哪里更新令牌

在专用于令牌管理的服务中。这是最佳实践。

更多信息

你说你有一个 Auth Guard。这是一个很好的做法。但是 是的,您可以从您的服务 重定向用户。你为什么不呢?这是要求用户连接的常用方式!在你的服务中使用路由器,真的,这没有问题。

从我的观点和你所描述的,除了守卫中的路由,你做得很好。如果您的应用程序具有高风险(并且您必须使用会话存储),我会给您的唯一建议是处理令牌的到期日期。