2016-07-03 2 views
1

각도 2 라우터 canActivate 가드에서 사용자가 인증되었는지 확인하고 싶습니다. 사실 인증 확인은 비동기 적이 지 않습니다. 단지 if this.user입니다. 그러나이 검사 (한 번만, 사용자가 웹 사이트를 열 때) 전에 응용 프로그램은 http.get()을 사용하는 서버에서 사용자의 데이터를 가져와야합니다. 그래서 Observable<boolean> 개체를 서버에서받은 경우에만 if this.user을 검사 할 개체를 반환하고 싶습니다.사용자가 router canActivate에서 인증을 받았는지 비동기로 확인하려면 어떻게해야합니까?

import { Injectable } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import { User } from '../user'; 

@Injectable() 
export class AuthService { 
    private initPromise: Promise<boolean>; 
    private user: User; 

    constructor() { 
     this.initPromise = new Promise(function(resolve, reject) { 
      receiveUserFromServer(function(userData) { 
       if (!userData) return resolve(null); 

       let user = new User(); 
       user.id = userData.id; 
       user.name = userData.name; 

       resolve(user); 
      }); 
     }); 
    } 

    isLoggedIn() { 
     // I don't know how to return Observable<boolean> here 
     // true, if user from receiveUserFromServer is exists 
     // but receiveUserFromServer should execute only once 
    } 
} 

답변

4

당신은 fromPromise 기능을 사용할 수 있습니다 :

나는이 시도했다.

isLoggedIn() { 
    return Observable.fromPromise(this.initPromise); 
}