0
我正在嘗試編寫一個路線警衛。這裏是我的路線......無法導航到門戶的應用程序
{ path: 'portal', component: PortalComponent, canActivate: [AuthGuard] }
和這裏的AuthGuard:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private appState: ApplicationState, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
let url: string = state.url;
return this.checkLogin(url);
}
checkLogin(url: string): Observable<boolean> {
return this.appState.User.map(
(user) => {
if (user.UserToken) return true;
this.navToLogin(url);
return false;
}
);
}
private navToLogin(redirUrl: string) {
this.appState.RedirectUrl = redirUrl;
this.router.navigate(['/']);
}
}
而這裏的ApplicationState你在哪裏得到來自用戶...
@Injectable()
export class ApplicationState {
private _user: BehaviorSubject<LoginUser> = new BehaviorSubject<LoginUser>(new LoginUser());
get User() {
return this._user.asObservable();
}
}
我希望用戶能夠如果用戶對象上存在UserToken,則訪問/門戶路由。但是,如果令牌不存在,我希望用戶導航到登錄頁面(默認路由/)。
我有一個鏈接/門戶,我嘗試點擊。 checkLogin()中的appState.User.map返回true,但是該應用程序從不導航到/ portal。
我在做什麼錯?這是那種「冷可觀察」情況嗎?