Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何做路由器认证保护?变得可观察<;用户>;从AngularFireAuth,然后转换为警卫的布尔值_Angular_Ionic Framework_Rxjs - Fatal编程技术网

如何做路由器认证保护?变得可观察<;用户>;从AngularFireAuth,然后转换为警卫的布尔值

如何做路由器认证保护?变得可观察<;用户>;从AngularFireAuth,然后转换为警卫的布尔值,angular,ionic-framework,rxjs,Angular,Ionic Framework,Rxjs,我正在使用路由器防护和AngularFireAuth来检查用户是否可以进入路由。问题是,AngularFireAuth返回类型,而guard需要类型 我在升华文本中收到一条错误消息:“类型用户不可分配给类型布尔” 我将遵循本教程: 我不知道如何将从AngularFireAuth类型检索到的数据转换为路由器保护 这是身份验证服务 interface User { uid: string; email: string; photoURL?: string; displayName?

我正在使用路由器防护和AngularFireAuth来检查用户是否可以进入路由。问题是,AngularFireAuth返回
类型,而guard需要
类型

我在升华文本中收到一条错误消息:“类型用户不可分配给类型布尔”


我将遵循本教程:

我不知道如何将从AngularFireAuth类型检索到的数据转换为路由器保护

这是身份验证服务

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)
          }
        })
      )
    }
用户界面{
uid:字符串;
电子邮件:字符串;
photoURL?:字符串;
displayName?:字符串;
favoriteColor?:字符串;
}
@可注射({providedIn:'root'})
导出类身份验证服务{
用户:可观察;
建造师(
私人afAuth:AngularFireAuth,
私人afs:AngularFirestore,
专用路由器
) {
////获取身份验证数据,然后获取firestore用户文档| | null
this.user=this.afAuth.authState.pipe(
开关映射(用户=>{
如果(用户){
返回此.afs.doc(`users/${user.uid}`)。valueChanges()
}否则{
返回(空)
}
})
)
}
这是授权保护

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']);
             }
         })
    )
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnapshot):可观察{
返回此.auth.user.pipe()
以(1)为例,
映射(用户=>!!用户),
点击(loggedIn=>{
如果(!loggedIn){
console.log('访问被拒绝')
this.router.navigate(['/login']);
}
})
)
错误'Type User不可分配给Type boolean'来自
auth.guard中返回this.auth.User.pipe()

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()
           take(1),
应该是

return this.auth.user.pipe(
           take(1),
现在它起作用了