2

각도 라우터에서 사용되는 canActivate 보호 장치를 구성 할 수있는 방법이 있습니까?각도 라우터 보호 구성

@Injectable() 
export class SessionGuard implements CanActivate { 

    public requireLeagues: boolean = true; 

    constructor(private authService: AuthService, private session: SessionService, private router: Router) { 
    } 


    async canActivate(): Promise<boolean> { 
     if (!this.authService.isLoggedIn) { 
      return false; 
     } 

     await this.session.start(); 

     if (this.requireLeagues && (!this.session.leagues || this.session.leagues.length == 0)) { 
      //Redirect to create league page 
      this.router.navigate(['/create-league']); 

      return false; 
     } else { 
      return true; 
     } 
    } 
} 

그리고이 경로 :

SessionGuard를 갖는

const routes: Routes = [ 
    {path: '', component: HomeComponent, canActivate: [AuthGuard, SessionGuard]},// <-- requireLeagues = false 
    {path: 'login', component: LoginComponent}, 
    {path: 'leagues', component: [AuthGuard, SessionGuard]}, 
]; 
@NgModule({ 
    imports: [RouterModule.forRoot(routes)], 
    exports: [RouterModule] 
}) 
export class AppRoutingModule { 
} 

내가 참 또는 거짓이 새로운, 다른 가드를 만들 필요 withouth 경로에 따라에 requireLeagues를 설정하고 싶습니다. 이것이 가능한가?

답변

1

예, canActivate 메소드는 현재 ActivatedRouteSnapshotRouterStateSnapshot으로 전달됩니다.

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    this.requireLeages = route.params... // something from route 
} 

여기 ActivatedRouteSnapshot에 대한 docs입니다. 경로와 서비스를 공유하기 위해 자신의 데이터를 저장하는 데 사용할 수있는 data 속성을 포함하여 많은 유용한 속성이 있습니다.