我的路线上有一名警卫,以防止未经授权的访问。守卫检查会话并在无效时调用登录服务。我的路线配置如下...
const routes: Routes = [
{ path: 'logon', loadChildren: './logon/logon.module#LogonModule' },
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', loadChildren: './home/home.module#HomeModule', canActivate: [HomeGuard] },
{ path: 'forms', loadChildren: './forms/forms.module#FormsModule', canActivate: [FormsGuard] },
{ path: 'processes', component: ProcessesComponent, canActivate: [ProcessGuard] },
{ path: '**', redirectTo: 'home' }
];
来自Guard的代码片段...
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
// This always reports home !
alert('Logon Guard - State = ' + state.url);
if (this.logonService.IsLoggedOn()) {
return true;
}
else {
// Tell the clientApp what url was in use when calling the canActivate.
this.logonService.RedirectUrl = state.url;
this.router.navigate(['logon']);
return false;
}
}
我想在登录后重新路由到最初请求的路由,并尝试使用 RouterStateSnapshot url 来获取请求的路由。但是它总是保留默认指定的路线..
{ path: '', redirectTo: 'home', pathMatch: 'full' },
因此,如果我浏览到“进程”路由,即“ http://localhost:4200/process ”,防护中的 canActivate 将始终在 RouterStateSnapshot url 属性中保存“主”路由。
我已经看到了以下类似的请求... Angular 2 RouterStateSnapshot 没有返回正确的 url
我已经尝试过为每条路线指定不同的警卫的建议(出于绝望),但这不起作用。这肯定不是答案吗?我应该能够在路由之间共享一个身份验证守卫吗?
我正在使用 Angular 4。