Я бы посоветовал вам использовать @angular/fire
, если вы его еще не используете.
Вот как вы можете использовать @angular/fire
для достижениячто вы пытаетесь.
AngularFireAuth
при внедрении в качестве зависимости имеет authState
, который имеет тип Observable<firebase.User>
.По сути, это состояние вашего текущего пользователя.
Теперь в вашем сервисе вы можете создать приватный BehaviorSubject<Observable<firebase.User>>
, для которого next
будет вызываться, как только ваш authState
изменится.
Затем вы можете выставить это BehaviourSubject<firebase.User>
asObservable
.Этот Observable является общедоступным, и каждый, кто внедрит ваш сервис в качестве зависимости, будет иметь доступ к user$
и подписаться на него, чтобы получить состояние текущего пользователя, вошедшего в систему.
Вот как это будет выглядеть в коде:
import { AngularFireAuth } from '@angular/fire/auth';
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { User } from '@app/shared/models/user.model';
@Injectable()
export class AuthService {
private user: BehaviorSubject<Observable<firebase.User>> = new BehaviorSubject<Observable<firebase.User>>(null);
user$ = this.user.asObservable().pipe(switchMap(user => user));
constructor(
private afAuth: AngularFireAuth
) {
this.user.next(this.afAuth.authState);
}
loginViaCredentails(user: User) {
return this.afAuth.auth.signInWithEmailAndPassword(user.email, user.password);
}
...
}