Я новичок в angular и пытаюсь пройти аутентификацию с помощью firebase.Я уже строю логин / регистр и выход из системы.Теперь он работает нормально, но теперь я хочу отобразить панель навигации (полностью отдельный компонент), в которой есть кнопка входа и выхода из системы.Мне нужно переключать эти кнопки в соответствии с authState пользователя.Поэтому я использовал подписку на authState.Но он работает только при входе пользователя в систему. Он не срабатывает при выходе пользователя из системы.Он должен возвращать ноль, когда пользователь выходит из системы, верно?Я проверил authState внутри authService, он нулевой после того, как пользователь вышел из системы.Так что я тут не так делаю?
Вот мой код.
auth.service.ts
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
import { AngularFireAuth } from '@angular/fire/auth';
import { Observable, of } from 'rxjs';
import * as firebase from 'firebase/app';
@Injectable({
providedIn: 'root'
})
export class AuthService {
authState: any;
constructor(
public db: AngularFirestore,
public mAuth: AngularFireAuth
) {}
getAuthState() {
return this.mAuth.authState;
}
doLogout() {
return new Promise((resolve, reject) => {
if (firebase.auth().currentUser) {
this.mAuth.auth.signOut();
resolve();
} else {
reject();
}
});
}
/* login, register, etc... */
}
nav.component.ts
import { Component, OnInit } from '@angular/core';
import { AuthService } from 'src/app/auth/auth.service';
import { Router } from '@angular/router';
import * as firebase from 'firebase/app';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit {
user: any;
constructor(
private authService: AuthService,
private router: Router) {}
ngOnInit() {
this.authService.getAuthState().subscribe( user => {
/* this doesn't respond to logout ... */
console.log(user);
this.user = user;
});
}
tryLogout() {
this.authService.doLogout()
.then(res => {
console.log('tryLogout', res);
this.router.navigate(['/login']);
}, err => console.log(err));
}
}