在我的Authservice
中,我有:
getAuthenticationState(): Observable<any> {
return this.angularFireAuth.authState;
}
在我的Guard
中:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
// In case of refresh
return this.authService.getAuthenticationState()
.pipe(map(user => !!user))
.pipe(tap(loggedIn => {
console.log(loggedIn);
if (!loggedIn) {
this.router.navigate(['/admin/login']);
} else {
return true;
}
}));
}
我的问题是我必须单击登录按钮两次(我确定它已按应有的方式实现了),似乎Guard不能作为Observable使用, loggedIn 值仅打印一次。
答案 0 :(得分:1)
添加take(1)来解决它以及为什么要使用2个管道,请将其更改为
return this.authService.getAuthenticationState()
.take(1)
.pipe(
map(user => !!user),
tap(loggedIn => {
console.log(loggedIn);
if (!loggedIn) {
this.router.navigate(['/admin/login']);
} else {
return true;
}
})
);