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
}
}