【发布时间】:2018-05-11 13:22:30
【问题描述】:
我对 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 部分以读取键 profileComplete
的值有人能指点我正确的方向吗?
谢谢
【问题讨论】:
标签: angular angular2-routing angular5 angularfire2 angular-observable