2017-10-23 20 views
1

저는 Angp 4 Web Project 2에서 작동 중입니다. 관리자 섹션에 들어가기 전에 권한이 부여되었는지 확인하고 싶습니다.ASP.NET WebAPI 2에서 angular4로 가드를 가진 리졸버

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
    return this.profile.getProfile() 
      .map(result => { setAuthorized(); return result;}) 
      .catch(res => { return Observable.of(new Profile()); }); 
} 

setAuthorized()가 (isAuthorized 기능으로 확인할 수 있도록 기능이 전역 변수의 권한을 설정합니다) 및 인증 : 는 그와 같은 각도의 라우팅의 해결을 설정하려고 가드 :

if (this.route.firstChild != null) { 
    return this.route.firstChild.data.map(res => { 
    if (isAuthorized()) { 
     return true; 
    } 
    }); 
} else { 
    return Observable.of(false); 
} 

라우팅은 다음과 같습니다

const routes: Routes = 
    [ 
    {path: ':lang', component: LanguageComponent, 
     children: [ 
      { path: 'dashboard', component: DashboardComponent, resolve: { authority: AuthorityResolverService} }, 
      { path: 'admin', component: AdminComponent, canActivate: [AuthorizedGuard], resolve: { authority: AuthorityResolverService}}, 
     ]} 
    ]; 

모든 것이 제대로 작동하는 것 같군. 하지만 문제는 내가 F5 키를 클릭하거나 URL을 복사하여 새 창에서 열면 오류 페이지로 항상 리디렉션됩니다. 내가 워크 플로우를 모니터링 할 때, 그것은 내가 직접 URL에 도달하려고 리졸버 호출하지 않았 음을 보여줍니다

로컬 호스트/관리자 나 오류가 수신되지 않는 경우

을하지만, 나는 항상 리디렉션됩니다. 어떤 아이디어?

답변

2

예상되는 동작입니다. 경로를 명중하면 guard가 먼저 실행되고 canActivate이 true를 반환하면 resolver가 실행됩니다. guard이 false를 반환 할 것이므로 리졸버는 호출되지 않을 것입니다.

로직을 약간 재 설계하려면 가드가 실제로 무엇인지를 감안하여 프로파일/권한 부여를 보호하는 방식으로 약간의 로직을 재 설계해야합니다. 즉, 일부 조건을 확인하고이를 기반으로 해결해야합니다. 귀하의 조건은 사용자가 인증되어 가드에 속한다는 것입니다.

해결 자 목적은 사용자가 구성 요소를 활성화 할 수있게되면 구성 요소 에 필요한 데이터를 얻는 것입니다.

+0

오, 맞습니다. 나는 resolver를 지우고 Gaurd 내부의 코드를 복사하고 Observable of boolean을 반환했다. 나는 또한 Guard에서 인증을했다. 굉장해, 고마워! –