Я использую охрану маршрутизатора с AngularFireAuth, чтобы проверить, может ли пользователь ввести маршрут.Проблема в том, что AngularFireAuth возвращает тип <User>
, в то время как для защиты требуется тип <boolean>
.
В моем возвышенном тексте появилось сообщение об ошибке: 'Тип Пользователь не может назначаться типу boolean'
Я слежу за этим уроком: https://angularfirebase.com/lessons/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
Любая помощь будет оценена.
Спасибо.