我尝试检查当前用户是否存在(登录)并在auth guard中返回 .
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
firebase.auth().onAuthStateChanged((user: firebase.User) => {
if (user) {
return true;
}
return false;
});
}
但我得到了这个错误:
声明类型既不是'void'也不是'any'的函数必须返回一个值 .
看起来返回语句没有链接到canActivate函数 .
2 回答
作为你的守卫canActivate方法返回类型是布尔值,你不会返回任何你得到错误的东西 .
您可以返回布尔值来解决此问题 . 但在你的情况下,我可以看到你的返回类型是可观察的,并且在observable中你想要返回true或false .
所以你改变了警惕 .
你需要做两件事,如下所示
您需要检查
firebase.auth().onAuthStateChanged()
的返回类型是什么,通常这些方法返回observable . 如果是这种情况,那么您需要将其更改为如下所示canActivate
方法应该返回Observable<boolean> | Promise<boolean> | boolean
你应该从onAuthStateChanged
回调中创建一个promise或observable: