我正在使用带有AngularFireauth的路由器护罩检查用户是否可以进入路由。问题是,AngularFireauth返回<User>
类型,而后卫需要<boolean>
类型。
我在崇高的文本中收到了一条错误消息:'类型用户不可分配给布尔值'
我正在关注本教程:https://angularfirebase.com/lesserons/google-user-auth-with-firestore-custom-data/
我不知道,如何将从AngularFireauth类型检索到路由器的后卫转换为
这是 auth.service
interface User {
uid: string;
email: string;
photoURL?: string;
displayName?: string;
favoriteColor?: string;
}
@Injectable({ providedIn: 'root' })
export class AuthService {
user: Observable<User>;
constructor(
private afAuth: AngularFireAuth,
private afs: AngularFirestore,
private router: Router
) {
//// Get auth data, then get firestore user document || null
this.user = this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges()
} else {
return of(null)
}
})
)
}
这是 auth.guard
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.auth.user.pipe()
take(1),
map(user => !!user),
tap(loggedIn => {
if (!loggedIn) {
console.log('access denied')
this.router.navigate(['/login']);
}
})
)
错误'类型用户无法分配给布尔值'来自return this.auth.user.pipe()
。在 auth.guard
任何帮助将不胜感激。
谢谢。
ah ..我刚刚在该博客上看到了评论部分。
那里的代码中有一个错字:
return this.auth.user.pipe()
take(1),
应该是
return this.auth.user.pipe(
take(1),
现在起作用。