Как вернуть логическое значение из потока на Angular Guard? - PullRequest
0 голосов
/ 02 июля 2018

Я создаю угловую защиту, которая пытается использовать функцию AngularFire2 Auth, но, похоже, я не понимаю ее правильно. Большинство ответов, которые я нашел в своем исследовании, используют оператор .map () для возврата логического результата. Но я не знаю, как применить это к моему случаю (я безуспешно пытался использовать map ()).

Итак, вот что у меня есть:

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import {AuthenticationService} from './services/authentication.service';
import {AngularFireAuth} from 'angularfire2/auth';
@Injectable({
  providedIn: 'root'
})
export class AuthenticationGuard implements CanActivate {
  constructor(public angularFireAuth: AngularFireAuth) {}
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.angularFireAuth.authState.subscribe((status) => {
      return (status !== null);
    });
  }
}

Но, похоже, он возвращает Наблюдаемое вместо его разрешения. Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

Вам не нужно возвращать логическое значение. canActivate может возвращать Observable<boolean>, поэтому Angular будет ждать результата для вас и разрешит активацию, если возвращаемое наблюдаемое выдаст true.

Добавьте map, чтобы преобразовать все, что ваш сервис излучает, в логическое значение и вернуть это наблюдаемое. Примерно так:

 canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.angularFireAuth.authState
     .pipe(
        map(status => status !== null)
     )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...