내 경로를 보호하기 위해 AuthGuard를 사용하여 사용자가 앱의 대시 보드를보기 전에 올바르게 로그인했는지 확인합니다.Angular2는 경로에 대한 액세스를 허용하기 위해 비동기 액세스의 결과가 필요합니다.
AuthGuard :
getValidLoginCheck(): boolean {
let headers = new Headers();
let options = new RequestOptions({ headers: headers });
headers.append('authorization', this.getToken());
this.http.get(this.baseUrl + 'api/auth/checkToken', options)
.map(res => res.json())
.subscribe(data => {return data.message === 'valid token' });
}
내가 왜 이런 일을 알고,하지만 난 getValid ... 기능 대기를하는 방법을 만들 수 있습니다 다음 getValidLoginCheck()는 부울을 반환하지 않습니다 그러나
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) {
// return true;
return this.userService.getValidLoginCheck();
}
http.get이 끝나면 내 경로를 올바르게 보호 할 수 있습니까?
allowed: Observable<boolean>
getValidLoginCheck(): boolean | Observable<boolean> {
let headers = new Headers();
let options = new RequestOptions({ headers: headers });
headers.append('authorization', this.getToken());
//save URL from routerStateSnapshot from canActivate like URL = state.url
this.http.get(this.baseUrl + 'api/auth/checkToken', options)
.map(res => res.json())
.subscribe(data => { this.allowed = Observable.of(true);
this.router.navigateByUrl (URL)를 활성화 할 수 있습니다에서
관찰 가능 항목이 처음에 정의되지 않았기 때문에 앱이로드되고 있지만 구성 요소가로드되지 않습니다. 어떻게하면 반환 할 때까지 기다릴 수 있습니까? –
canActivate가 true를 반환 할 때까지 기다려야하는 것을 반환하는 것의 의미는 무엇입니까? UI에서 대기 상태를 표시하겠습니까? –
true로 설정된 경우 구성 요소를 표시하지 않습니다. –