Angular / fire authState.subscribe не отвечают на выход - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в 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));
  }
}
...