首页 > 解决方案 > 无法使用具有来自 firebase 角色的 Angular AuthGuard

问题描述

我尝试创建一个 Guard,它应该检查用户是否具有管理员角色。
为此,我在 Cloud Firestore 中有一个布尔值 (admin = true | false)。

当我尝试检查当前用户是否是管理员时,我收到以下错误消息:

找不到模块:错误:无法解析“rxjs/add/operator/map”

我的 admin-guard.ts

@Injectable()
export class AdminAuthGuard implements CanActivate {

  constructor(private auth: AuthService) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> {

    return this.auth.user$.pipe(
      take(1),
      map(user => user && user.admin ? true : false),
      tap(isAdmin => {
        if (!isAdmin) {
          console.error('Access denied - Admins only');
        }
      })
    );
  }
}

我的 auth.service.ts

@Injectable()
export class AuthService {

  user$: Observable<AppUser>;

  constructor(private afAuth: AngularFireAuth,
              private afs: AngularFirestore) {

    this.user$ = this.afAuth.authState.pipe(switchMap(user => {
      if (user) {
        return this.afs.doc<AppUser>(`users/${user.uid}`).valueChanges();
      } else {
        return of(null);
      }
    }));
  }
}

我的用户界面:

export interface AppUser {
  uid: string;
  email: string;
  admin?: boolean;
}

如果有人能给我一个关于如何解决这个问题的提示,那就太好了。谢谢!

标签: angulartypescriptfirebaserxjs

解决方案


我可以通过删除 import 'rxjs/add/operator/map' 并使用 import {map} from 'rxjs/operators' 来解决问题;


推荐阅读