I want to check if user is authenticated in angular 2 router canActivate guard. Actually, authentication check is not asynchronous, it is just a check if this.user. But before this check (only once, when user opened website) application should get user's data from server useing http.get().
So, I want to return Observable<boolean> object that will check if this.user only when user's data received from the server.
I tried this:
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
}
}