2016-07-03 12 views
1

角度2のルータcanActivateガードでユーザが認証されているかどうかを確認したい。実際には、認証チェックは非同期ではなく、ただのチェックif this.userです。しかし、このチェック(一度だけ、ユーザーがWebサイトを開いたとき)の前に、アプリケーションはhttp.get()を使用するサーバーからユーザーのデータを取得する必要があります。 したがって、サーバーからユーザーのデータが受信されたときにのみ、if this.userをチェックするObservable<boolean>オブジェクトを返したいとします。ユーザがルータで認証されているかどうかを非同期で確認するにはどうすればいいですか?

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); 
} 
関連する問題