Я пытаюсь использовать защиту маршрута, чтобы проверить, вошел ли я в систему перед доступом к маршруту. для этого у меня есть 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