更新时间:2022-12-11 16:11:57
会是这样的:
import { CanActivate, Router } from '@angular/router';
import { Injectable } from "@angular/core";
import { AngularFireAuth } from '@angular/fire/auth';
import { take, switchMap } from 'rxjs/operators';
@Injectable()
export class AdminGuard implements CanActivate {
constructor(private auth: AngularFireAuth, private router: Router) { }
canActivate() {
return this.auth.authState.pipe(
take(1),
switchMap(async (authState) => {
if (authState) { // check are user is logged in
const token = await authState.getIdTokenResult()
if (!token.claims.admin) { // check claims
this.router.navigate(['/auth/login'])
return false
} else {
return true
}
} else {
this.router.navigate(['/auth/login'])
return false
}
}),
)
}
}