我需要知道用户是否已登录,但是当我检查时,AngularFireAuth还没有给出响应,因此我认为我没有登录。
我的服务:
loggedIn = false;
constructor(private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user=>{
this.loggedIn = true;
});
}
然后我有我的警卫:
@Injectable()
export class OnlyLoggedInUsersGuard implements CanActivate {
constructor(private user: UserService) {}
canActivate(){
return this.user.loggedIn? true:false;
}
当我尝试打开仪表板时,它表示我没有登录,因为它在构建服务之后检查,但在observable将loggedIn
更改为true之前。
答案 0 :(得分:1)
您可以在UserService
内设置:
private loggedInSubject = new BehaviorSubject<bool>(false);
public loggedIn = this.loggedInSubject.asObservable().distinctUntilChanged();
constructor(
private afAuth: AngularFireAuth
) {
this.afAuth.authState
.subscribe(user=> {
this.loggedInSubject.next(true);
});
}
然后,您可以在Guard
:
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> {
return this.user.loggedIn.take(1);
}