Я строю приборную панель для руководителей общежития и летчика, которые там живут.Таким образом, схема такова, что они не должны иметь доступа к панели инструментов без регистрации.Я проследил видео на 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;
}
}
Любые рекомендации приветствуются.Приветствия