无法使用具有来自 firebase 角色的 Angular AuthGuard

Posted

技术标签:

【中文标题】无法使用具有来自 firebase 角色的 Angular AuthGuard【英文标题】:Angular AuthGuard with roles from firebase cant be used 【发布时间】:2020-12-18 08:45:21 【问题描述】:

我尝试创建一个 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;

如果有人能告诉我如何解决这个问题,那就太好了。谢谢!

【问题讨论】:

你试过 import map from 'rxjs/operators'; 【参考方案1】:

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

【讨论】:

以上是关于无法使用具有来自 firebase 角色的 Angular AuthGuard的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase 中实现基于角色的访问控制

基于角色的身份验证 vue js firebase

无法在 React.js 中接收来自 Firebase 的消息

颤动的谷歌地图无法显示来自firebase的标记

如何在 Firebase 中创建基于角色的访问控制或自定义声明

无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel