我正在尝试向canActivate()
中的Firebase发出多个请求,但TS编译器会标记错误:声明类型既不是'void'也不是'any'的函数必须返回一个值。
这是我正在尝试做的事情:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> {
this.auth.take(1).map((authState : FirebaseAuthState) => {
if(authState) {
// Ok, so user is authenticated, let's check if it is admin
return this.db.object(`/users/${authState.uid}`)
.take(1)
.map((user) => {
if(user.isAdmin) {
// Redirect admin user to /admin-panel
this.router.navigate(['/admin-panel']);
return true;
} else {
// It is normal user, continue
return true;
}
})
} else {
// User not authenticated
this.router.navigate(['/login']);
return false;
}
})
}
所以,我的问题是我不能在canActivate()
感谢。
答案 0 :(得分:0)
您没有从canActivate
返回任何内容,请将其更改为:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> {
return this.auth.take(1).map((authState : FirebaseAuthState) => {
if(authState) {
// Ok, so user is authenticated, let's check if it is admin
return this.db.object(`/users/${authState.uid}`)
.take(1)
.map((user) => {
if(user.isAdmin) {
// Redirect admin user to /admin-panel
this.router.navigate(['/admin-panel']);
return true;
} else {
// It is normal user, continue
return true;
}
})
} else {
// User not authenticated
this.router.navigate(['/login']);
return false;
}
})
}
答案 1 :(得分:0)
我找到了similar question。因此,可以使用mergeMap
执行多个请求。