angular route guard возвращает неправильное значение для наблюдаемого

Я пытаюсь использовать защиту маршрута, чтобы проверить, вошел ли я в систему перед доступом к маршруту. для этого у меня есть replaySubject, который содержит true, если пользователь вошел в систему. когда я вызываю свой метод для проверки того, вошел ли пользователь в систему, его значение истинно, но при вызове того же метода внутри метода canActivate его значение пустое, поэтому оно ничего не вернуть.

метод canActivate:

//inside AuthService
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
  return this.isLoggedIn();
}

метод isLoggedIn:

//inside AuthService
isLoggedIn() {
return this.loggedIn
  .first()
  .do(user => {
    console.log(user);
  })

}

loggedIn тема:

//inside AuthService
loggedIn: Subject<boolean> = new ReplaySubject<boolean>(1);

связь:

<a (click)="checkLogin()" [routerLink]="['/table']">some text</a>

checkLogin метод:

checkLogin() {
this.auth
  .isLoggedIn()
  .toPromise()
  .then(data => {
    // this returns true
    console.log("login status is", data);
  });
}

модуль маршрутизации:

const appRoutes: Routes = [
  { path: "home", component: HomeComponent },
  { path: "table", component: TableComponent, canActivate: [AuthService] },
  { path: "", redirectTo: "/home", pathMatch: "full" }
];

угловая версия: 5.2.8, угловая версия маршрутизатора: 5.2.8


person uri baum    schedule 17.04.2018    source источник
comment
В вашем методе canActivate попробуйте вызвать ту же службу, которую вы вызываете для checkLogin ().   -  person parth    schedule 17.04.2018
comment
Как предоставляется ваш AuthService? Вы используете ленивые загружаемые модули?   -  person Pierre Mallet    schedule 17.04.2018


Ответы (1)


спасибо Пьер за то, что указал мне в правильном направлении

Оказывается, я предоставил свою службу аутентификации как в своем компоненте приложения, так и в моем модуле приложения, что, в свою очередь, привело к тому, что у меня было два компонента моей службы аутентификации в приложении: одно для моих компонентов и одно для моих модулей.

я просто удалил службу из компонента приложения, и она сработала

person uri baum    schedule 17.04.2018