Я пытаюсь сделать перенаправление на страницу /dashboard
всякий раз, когда пользователь вошел в систему. Целевая страница по умолчанию - /home
, но домашняя страница вошедшего пользователя - /dashboard
.
У меня есть класс обслуживания пользователя, в котором я создаю sharedUser, и это BehaviorSubject:
public sharedUser= new BehaviorSubject<User>(null);
И затем у меня есть метод initUser, в котором я задаю значения объекту пользователя. Метод initUserStatus()
является Observable и заполняет данные из запроса.
private initUser(accessToken: string): void {
const tokenData = TokenUtil.decodeToken(accessToken);
this.user.email = tokenData.email;
this.initUserStatus().subscribe(
() => this.sharedUser.next(this.user)
);
}
И затем у меня есть класс Guard, в котором я пытаюсь перенаправить, если данные пользователя заполнены и фактически вошли в систему: пользователь входит в систему, когда электронная почта initalized, метод isLoggedIn()
проверяет, есть ли электронная почта.
export class HomePageGuard implements CanActivate {
constructor(private userService: UserService, private router: Router) { }
public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<UrlTree | boolean> {
return this.userService.sharedUser.asObservable().pipe(
map(() => {
if (this.userService.isLoggedIn()) {
return this.router.createUrlTree(['/dashboard']);
}
return true;
}
));
}
}
Кажется, что canActivate
будет в бесконечном l oop, и он не будет go завершен, и поэтому он будет не перенаправлять на страницу / дашборд.
Как я могу это исправить? Или что мне не хватает?