在Angular 8中,AngularFireAuth的authState属性返回的是一个Observable
要解决这个问题,你需要使用pipe操作符来转换Observable对象。下面是一个使用pipe操作符解决该错误的示例代码:
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { AngularFireAuth } from '@angular/fire/auth';
import { map } from 'rxjs/operators';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private afAuth: AngularFireAuth) { }
canActivate() {
return this.afAuth.authState.pipe(
map(user => {
if (user) {
// 用户已登录,可以导航到目标路由
return true;
} else {
// 用户未登录,重定向到登录页面
this.router.navigate(['/login']);
return false;
}
})
);
}
}
在上面的代码中,我们使用pipe操作符来转换authState的Observable对象。在pipe中,我们使用map操作符来检查用户是否已经登录。如果用户已经登录,我们返回true,允许导航到目标路由。如果用户未登录,我们重定向到登录页面并返回false。
请注意,为了使用map操作符,我们需要从'rxjs/operators'中导入map。