Я довольно новичок в угловых и в процессе разработки небольшого веб-приложения.
Я создал простой адрес электронной почты / пароль, используя angularfire2. Часть аутентификации работает нормально. Однако, кажется, что authguard для некоторой причины всегда думает, что пользователь вышел из системы, даже если console.log из службы аутентификации, которую я создал, возвращает пользователя.
Вот моя реализация:
Услуги:
export class AuthService {
private user: Observable<firebase.User> = null;
private userDetails: firebase.User = null;
constructor(public firebaseAuth: AngularFireAuth, private router: Router) {
this.user = firebaseAuth.authState;
this.user.subscribe(
(user) => {
if (user) {
this.userDetails = user;
console.log(this.userDetails.uid);
console.log('service: logged');
} else {
this.userDetails = null;
console.log('service: logged out');
}
}
);
}
isAuthenticated() {
if (this.userDetails == null ) {
return false;
} else {
return true;
}
}
}
Я использую функцию isAuthenticated () (в AuthGuard), чтобы определить, вошел ли пользователь в систему или нет.
Авторская охрана:
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService,
private router: Router) {}
canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.isAuthenticated()) {
console.log('guard: user is logged in ')
return true;
} else {
this.router.navigate(['login']);
console.log('guard: user is not logged in ')
return false;
}
}
}
Мой вопрос: почему функция, используемая в AuthGuard, считает, что пользователь не вошел в систему, но AuthService считает, что пользователь вошел в систему? Кроме того, я заметил, когда страница обновляется, пользователь выходит из системы. Есть ли способ обратиться к обоим вместе?
Большое спасибо за ваше время.
Edit:
Массив маршрутов
const appRoutes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full',
},
{ path: '', component: FullLayoutComponent, data: { title: 'home' }, children: HOME_ROUTES, canActivate: [AuthGuard] }, // 'home page' is here
{ path: '', component: ContentLayoutComponent, data: { title: 'content' }, children: CONTENT_ROUTES}, // login page is a child here
];
Страница входа определяется как дочерняя в CONTENT_ROUTES, где маршрут по умолчанию - HOME_ROUTES.