Angula 5 Firebase Auth Guard статус входа отличается от того, что перенастроено из службы аутентификации - PullRequest
0 голосов
/ 06 мая 2018

Я довольно новичок в угловых и в процессе разработки небольшого веб-приложения.

Я создал простой адрес электронной почты / пароль, используя 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.

...