我对 Angular 很陌生..
我的网络应用程序中有一个 AuthService,它通过 Angularfire2(firebase)对用户进行身份验证,并将电子邮件和一个标志(指示用户是否填写了配置文件数据表单)插入到 firebase 数据库中。
我的路由守卫检查用户是否经过身份验证以及用户是否填写了配置文件数据表单,如果没有,我将重定向到配置文件数据表单。如果用户已经填写了表格,我会直接进入希望页面。
我通过UserData 服务获取用户是否填写了基本数据表:
constructor(private afd: AngularFireDatabase, private authService: AuthService) {
}
isProfileComplete (): Observable<any> {
return this.afd.list(`/users/${this.authService.uid}`)
.snapshotChanges()
}
然后在authGuard我做逻辑来指导用户:
constructor(private authService: AuthService,
private router: Router,
private usrData: UserDataService) {}
canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.isAuthenticated()) {
console.log(this.usrData.isProfileComplete())
this.usrData.isProfileComplete()
.map(userInfos => {
console.log(userInfos)
userInfos.forEach(item => {
console.log(userInfos)
if ((item.payload.key === 'profileComplete') && (item.payload.val() === true)) {
console.log('user is logged in & data form completed')
return true;
} else if ((item.payload.key === 'profileComplete') && (item.payload.val() !== true)) {
this.router.navigate(['data_form']);
console.log('user logged in not completed the form')
return false;
}
})
})
} else {
this.router.navigate(['login']);
console.log('user is not logged in ')
return false;
}
}
我认为代码没有到达observable的map部分来读取 key profileComplete的值
有人可以请我指出正确的方向吗?
谢谢