如何做路由器身份验证保护?<User> 从 AngularFireAuth 获得可观察性,然后转换为守卫的布尔值



我正在使用带有AngularFireauth的路由器护罩检查用户是否可以进入路由。问题是,AngularFireauth返回<User>类型,而后卫需要<boolean>类型。

我在崇高的文本中收到了一条错误消息:'类型用户不可分配给布尔值'


我正在关注本教程:https://angularfirebase.com/lesserons/google-user-auth-with-firestore-custom-data/

我不知道,如何将从AngularFireauth类型检索到路由器的后卫转换为

这是 auth.service

interface User {
  uid: string;
  email: string;
  photoURL?: string;
  displayName?: string;
  favoriteColor?: string;
}

@Injectable({ providedIn: 'root' })
export class AuthService {
  user: Observable<User>;
  constructor(
    private afAuth: AngularFireAuth,
    private afs: AngularFirestore,
    private router: Router
  ) {
      //// Get auth data, then get firestore user document || null
      this.user = this.afAuth.authState.pipe(
        switchMap(user => {
          if (user) {
            return this.afs.doc<User>(`users/${user.uid}`).valueChanges()
          } else {
            return of(null)
          }
        })
      )
    }

这是 auth.guard

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> {
      return this.auth.user.pipe()
           take(1),
           map(user => !!user),
           tap(loggedIn => {
             if (!loggedIn) {
               console.log('access denied')
               this.router.navigate(['/login']);
             }
         })
    )

错误'类型用户无法分配给布尔值'来自return this.auth.user.pipe()。在 auth.guard

任何帮助将不胜感激。

谢谢。

ah ..我刚刚在该博客上看到了评论部分。

那里的代码中有一个错字:

return this.auth.user.pipe()
           take(1),

应该是

return this.auth.user.pipe(
           take(1),

现在起作用。

最新更新