Маршрутизатор Angular 2 - разрешите аутентификацию с помощью angularfire2

У меня есть маршрут, по которому я хочу подождать, пока не получу объект авторизации из firebase. Вот код, который у меня есть:

Маршрут

{
  path: 'random',
  component: RandomComponent,
  resolve: { auth: AuthService }
}

Служба аутентификации

@Injectable()
export class AuthService implements Resolve<any> {

  constructor(private af: AngularFire) { }

  resolve(): Observable<any> {
    return this.af.auth.take(1);
  }

}

Случайный компонент

export class RandomComponent {

  constructor(private route: ActivatedRoute) {
    console.log(this.route.snapshot.data);
  }

}

Как ни странно, он регистрирует Object { }, поэтому пустой объект. Если я изменю AuthService.resolve, чтобы он возвращал Observable.of('whatever'), то он регистрирует Object { auth: "whatever" }, поэтому я почти уверен, что эта часть кода работает, просто по какой-то причине наблюдаемая аутентификация angularfire2 не работает в этом случае. (Я действительно не наблюдаемый эксперт, так что, вероятно, я делаю что-то не так).

Если я делаю this.af.auth.take(1).subscribe(auth => console.log(auth));, он регистрирует объект авторизации, так что эта часть тоже работает.

Так что же вызывает эту проблему? Что я делаю не так?

(Используя последний маршрутизатор, angular2 и angularfire2.)


person Andrew    schedule 04.07.2016    source источник


Ответы (1)


Это должно быть this.af.user.pipe(take(1)) или this.af.authState.pipe(take(1)).

person G Man    schedule 04.07.2019