如何在Angular 2中实现以下流程?
我认为这是需要身份验证的应用程序中相当标准的场景。
应用程序所需的配置数据在可注射服务中定义。
你认为有更好的方法吗?
我应该在哪里实现检查localstorage的逻辑并通过http调用异步获取配置?
在引导程序的App组件的构造函数中?
如何防止进一步执行其他组件(它们依赖于此配置数据的存在)?
答案 0 :(得分:2)
是的,在我看来这听起来像是一个好方法!
我应该在哪里实现检查localstorage的逻辑并通过http调用异步获取配置?在引导程序的App组件的构造函数中?
首先,不要使用App组件的constructor
。
您应该使用构造函数()来设置依赖注入,而不是其他。大多数情况下,我们使用ngOnInit
进行所有初始化/减速,并避免在构造函数中使用的东西。构造函数应仅用于初始化类成员,但不应该执行实际的“工作”。更多信息in this answer。
其次,让我们看看究竟在哪里实现逻辑。创建AuthenticationService
。
实施login()
方法并在isUserLoggedIn
上添加AuthenticationService
布尔值。用户登录时,将JWT
令牌存储在LocalStorage中。此外,请将isUserLoggedIn
切换为true
。
在isUserLogged()
上实施AuthenticationService
方法。应用程序启动时始终调用此方法,例如在应用程序的ngOnInit
生命周期钩子内。 isUserLogged()
方法逻辑应如下:
isUserLoggedIn
切换为false
。/check-if-user-is-logged
。根据结果调用它 - 切换isUserLoggedIn
。在logout()
上实施AuthenticationService
方法。当用户登录时,从LocalStorage中清除JWT
令牌。此外,请将isUserLoggedIn
切换为false
。
然后,在所有受保护的路由上实施auth guard。
如何防止进一步执行其他组件(它们依赖于此配置数据的存在)?
在isUserLoggedIn
上使用AuthenticationService
布尔值。此外,您可以在AuthenticationService
上应用检查特定配置的其他方法。
另外,在所有受保护的路线上使用auth guard。