Наблюдаемая Аутентификация AngularFirebase проблема после обновления - PullRequest
0 голосов
/ 07 февраля 2020

Project использует авторизацию firebase, имея класс auth.service.ts, который разрешает все, что связано с пользователем. Он имеет общедоступное c наблюдаемое пользовательское свойство, которое затем используется в проекте для различных целей.

Этот код работал до последнего обновления пакета.

 constructor(
    private firestore: AngularFirestore,
    private fireauth: AngularFireAuth
  ) {
    this.user = this.fireauth.authState.pipe(switchMap(user => {
      if (user) {
        return this.firestore.doc<User>(`users/${user.uid}`).valueChanges();
      } else {
        return of(null);
      }
    }));
  }

После обновления до последних версий инструментов Firebase и angular все подписки на authservice.user больше не срабатывают вообще. Я обнаружил, что если я использую .pipe(first()) до .pipe(switchMap(, я на самом деле получаю триггер пользователя и подписки, но он не работает как положено. Поскольку, когда пользователь вышел из системы, он не очищает свойство user от authservice.

    this.user = this.fireauth.authState.pipe(first()).pipe(switchMap(user => {
      if (user) {
        return this.firestore.doc<User>(`users/${user.uid}`).valueChanges();
      } else {
        return of(null);
      }
    }));

Причина, по которой я попытался это сделать, заключается в том, что valueChanges() возвращает наблюдаемое, которое затем оборачивается в наблюдаемое. Поэтому я подумал, что это главная проблема, а может и не быть.

Я пробовал несколько обходных путей и экспериментировал с использованием authState непосредственно на компонентах вместо моего собственного сервиса, но есть немало причуд, которые случается, что, используя мой ограниченный опыт работы с angular, я не могу объяснить подробно. В результате подписки даже не происходят, и ошибок нет.

Подробнее Я не буду sh использовать firebase.User в качестве основного объекта пользователя, скорее из-за возможности редактировать и настраивать профиль, добавьте роли и т. д. c. Я думал, что лучше просто использовать пользовательский. Вот почему я беру User из пожарного магазина.

Кроме того, я изучил документацию библиотеки .

ОБНОВЛЕНИЕ Чтобы доказать это, я удалил канал first() и изменил один из компонентов, которые зависят от него, для обработки вложенных наблюдаемых. Вот так.

this.authService.user.subscribe(currentUser => {
      currentUser.subscribe(u => {
        this.characterService.readCharacters(u.uid).subscribe({
          next: (value) => { this.characters = value; }
        });
      })
    });

Это на самом деле работает. Просто так не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...