Я хочу проверить, аутентифицирован ли пользователь в угловой 2-мя маршрутизатора canActivate. На самом деле проверка подлинности не является асинхронной, это всего лишь проверка if this.user
. Но перед этой проверкой (только один раз, когда пользователь открыл сайт) приложение должно получить данные пользователя с сервера, использующего http.get(). Итак, я хочу вернуть Observable<boolean>
объект, который будет проверять if this.user
только при использовании данных пользователя, полученных с сервера.Как проверить асинхронно, если пользователь аутентифицирован в маршрутизаторе canActivate guard в угловом 2?
Я попытался это:
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
}
}