Routing Guard没有在RouterStateSnapshot中指定正确的路由

时间:2017-05-31 16:10:03

标签: angular routing angular2-guards

我的路线上有一个警卫,以防止未经授权的访问。如果无效,保护会检查会话并调用登录服务。我的路由配置如下......

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网址来获取请求的路由。但是它始终保持默认值中指定的路径。

{path:'',redirectTo:'home',pathMatch:'full'},

因此,如果我浏览到'进程'路由,即'http://localhost:4200/process',则防护中的canActivate将始终在RouterStateSnapshot url属性中保存'home'路由。

我见过以下类似的请求...... Angular 2 RouterStateSnapshot not returning correct url

我已经尝试过为每条路线指定一个不同的守卫(出于绝望)的建议,但这不起作用。这肯定不是答案吗?我应该能够在路由中共享身份验证Guard吗?

我正在使用Angular 4。

0 个答案:

没有答案