Вы не получаете пользователя в своем auth.service.ts
:
export class AuthService {
user$: Observable<firebase.User>;
constructor(private afAuth: AngularFireAuth,
private route: ActivatedRoute,
private userService: UserService) {
this.user$ = afAuth.authState;
}
// The code omitted for the brevity
public getappUser(): Observable<AppUser> {
return this.user$
.pipe(
switchMap(user => {
if (user) {
return this.userService.get(user.uid).valueChanges();
}
return of(null);
}));
}
}
Кроме того, вам необходимо переименовать admin-auth.service.ts
в admin-auth-guard.service.ts
:
import { tap, map } from 'rxjs/operators';
export class AdminAuthGuard implements CanActivate {
constructor(private auth: AuthService,
private userService: UserService) { }
canActivate(): Observable<boolean> {
return this.auth.getappUser()
.pipe(
tap(val => console.log(`BEFORE MAP: ${val}`)),
map(x => x.isAdmin)
);
}
}
И тогда выможете защитить ваши маршруты, используя AdminAuthGuard
:
import { AdminAuthGuard } from '...';
RouterModule.forChild([
{ path: 'heroes',
component: HeroesComponent,
canActivate: [AdminAuthGuard]
}
])