据我了解CanActivate Angular2 中的接口(interface)仅对路由更改有效。因此,如果我有一个要求用户登录的页面 p,我可以创建一个实现 CanActivate 接口(interface)的守卫,这将允许 RouterModule仅在用户登录时激活p。
但是当 p 处于事件状态并且用户被注销时会发生什么?我试图找到最佳实践来检查是否允许在不更改 RouterModule 中的路由的情况下激活页面,但我找不到任何有用的东西。假设页面 p 处于事件状态并且需要登录。现在,当 p 处于事件状态时以某种方式触发注销,但不涉及路由更改。假设服务器响应 401 并且应用程序通知用户不再登录。检查事件页面是否需要登录并采取相应措施的最佳做法是什么?可能是事件页面不需要登录。在那种情况下,一切都应该保持原样。
最佳答案
您可以在路由中添加data
,稍后您可以使用它来检查该路由是否需要身份验证,
类似下面,
{
path: ...,
component: ...,
canActivate: [CanActivateGuard],
data: { authRequired: true }
}
在注销触发器中,您可以注入(inject)ActivatedRoute
来检查激活的路由数据,以确定是否要将用户发送到登录页面,
constructor(route: ActivatedRoute) {}
...
someCallBack(){
if(!!this.route.snapshot.data
&& this.route.snapshot.data.authRequired == true){
// redirect to login page
}
}
关于Angular2 在页面处于事件状态时触发 CanActivate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812955/