Angular / Firebase - CanActivate / Проблема с входом - PullRequest
0 голосов
/ 25 октября 2018

Я строю приборную панель для руководителей общежития и летчика, которые там живут.Таким образом, схема такова, что они не должны иметь доступа к панели инструментов без регистрации.Я проследил видео на YouTube (демонстрации с Angular) и заставил работающего провайдера электронной почты и паролей.

Теперь эта проблема, я пытаюсь реализовать AuthGuard CanActivate, но по какой-то причине логика кажется обратной и не работаетперенаправление, если пользователь не вошел в систему.

Файл AuthService

import { Injectable } from '@angular/core';
import { of as observableOf, Observable } from 'rxjs';
import { AngularFireAuth } from '@angular/fire/auth';
import { switchMap, map } from 'rxjs/operators';
import { auth } from 'firebase';
import { AngularFireDatabase } from '@angular/fire/database';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  redirectUrl: string;
  uid = this.afAuth.authState.pipe(
    map(authState => {
      if (!authState) {
        return null;
      } else {
        return authState.uid;
      }
    })
  );
  isAdmin: Observable<boolean> = this.uid.pipe(
    switchMap(uid => {
      if (!uid) {
        return observableOf(false);
      } else {
        return this.db.object<boolean>('/admin/' + uid).valueChanges();
      }
    })
  );
  isLoggedIn = this.afAuth.authState.pipe(
    map(authState => {
      if (!authState) {
        return observableOf(false);
      } else {
        return observableOf(true);
      }
    })
  );
  constructor(private afAuth: AngularFireAuth, private db: AngularFireDatabase) { }
  login() {
    this.afAuth.auth.signInWithEmailAndPassword('user@email.com', '4password');
  }
  logout() {
    this.afAuth.auth.signOut();
  }
}

Файл AuthGuard

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { UserService } from './user.service';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private user: UserService, private router: Router) { }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    console.warn('AuthGuard#canActivate called');

    // let url: string = state.url;

    if (this.user.uid) {
      this.router.navigate(['/login']);
      return false;
    }

    return true;
  }
}

Любые рекомендации приветствуются.Приветствия

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