用angular 8和firebase保护管理路由的问题

时间:2019-10-30 17:17:45

标签: angular typescript firebase routes admin

我想保护Web应用程序中的管理路由。我创建了一个admin-auth-guard服务,并使用canActivate()(我遇到了问题,但已参考上一个线程对其进行了修复)。现在,在编译期间没有弹出错误,但实时地,控制台弹出了一些错误消息: Console Error Message 这是我的管理员身份验证保护服务代码:

export class AdminAuthGuardService {

  constructor(private auth: AuthService, private userService: UserService) { }
  canActivate():Observable<boolean>{
    return this.auth.user$
    .pipe(switchMap( user => {
      return this.userService.get(user.uid).valueChanges()}))
    .pipe(map(appUser=>appUser.isAdmin));
  }
}

我的身份验证服务代码:

export class AuthService {
  user$:Observable<firebase.User>
  constructor(private afAuth :  AngularFireAuth ,private route: ActivatedRoute) {
    this.user$=afAuth.authState;
   }
  login(){
    let returnUrl=this.route.snapshot.queryParamMap.get('returnUrl') || '/'
    localStorage.setItem('returnUrl',returnUrl);
    this.afAuth.auth.signInWithRedirect(new firebase.auth.GoogleAuthProvider());
  }
  logout(){
    this.afAuth.auth.signOut();
  }
}

我的用户服务代码:

export class UserService {

  constructor(private db: AngularFireDatabase) { }
  save(user:firebase.User){
    this.db.object('/users/'+user.uid).set({
      name: user.displayName,
      email: user.email
    });
  }
  get (uid:string) : AngularFireObject<appUser>{
    return this.db.object('/users'+uid);
  }
}

我的应用程序用户模块:

export interface appUser{
    name: string;
    email: string;
    isAdmin: boolean
}

我不明白为什么会这样。谢谢您的帮助。

0 个答案:

没有答案