当我的应用程序启动时,我检查cookie,如果用户被授权,我想向他展示MainComponent . 如果用户未经授权,则需要显示LoginComponent .
这个逻辑应该在哪里?在app.module.ts或app.component.ts中?如何控制将显示哪个组件?逻辑“显示MainComponent然后如果用户未经授权重定向到LoginComponent”是不好的,用户希望从开始看到正确的组件 . 如果在RouterModule中对根路由进行硬编码,我该怎么做?
谢谢 . 附:是的,我在Angular 2中完全是新手:)
2 回答
基本上,您需要
Guard
添加到Route
.您需要设置一个
Service
,它将存储您的用户的身份验证状态(例如,在您登录时设置),然后在您的路线上添加一个
guard
,它将检查您的service's boolean state
,并允许激活或不激活路线 . 如果守卫返回true
,则用户可以访问该路由,如果不是,则需要将其重定向到login
并返回false .让我们很容易做到:
设置 auth.service.ts :
不要忘记在
ngModule()
中添加服务提供商现在,您可以通过使用依赖注入调用服务从组件调用服务并设置身份验证状态:
现在为你的路线添加一名警卫
设置 auth.guard.ts
用警卫更新你的
routes
:不要忘记将警卫添加到
appModule
的提供者处(并且要小心提供一次,因为您只需要一个警卫实例) .注意:由于您的应用程序非常小,您可能会将AuthGuard和您的服务放在同一个
providers
阵列中 . 此外,您不需要为警卫设置共享服务 .Roman,Angular 2为您提供了CanAtivate方法,可以使用您的路由列表配置,以说明用户是否可以访问特定路由 .
基本上,您需要像这样配置您的路线
因此,每当您尝试访问应用程序的/ settings页面时,Angular会向AuthGuard询问您是否可以这样做 .
以下是我对AuthGuard的完整实现(您可能需要进行一些更改):