我有一個保護,檢查用戶的會話。 我從承諾創建observable並返回可觀察值。保護總是重定向到默認路由
不幸的是,路由器總是將刷新時重定向到主頁。 我想它與observable有關,因爲當我簡單地導航時,它會進入if並返回'Observalbe.of(true)',這是有效的。
@Injectable()
export default class SessionGuard implements CanActivate {
constructor(private authService: AuthService) {}
public canActivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.authService.hasSessionChecked) {
return Observable.of(true).take(1);
}
const obs = Observable.fromPromise(this.authService.getSession());
return obs.map((session) => {
this.authService.setUserSession(session);
return true;
}).take(1);
}
}
我試着用'返回true'替換observable,並且所有工作都按預期工作。
任何想法?謝謝!
是心不是真實的,在界面中canActivate的定義允許3種返回類型:導出接口CanActivate { canActivate(路線:ActivatedRouteSnapshot,狀態:RouterStateSnapshot):可觀察 | Promise |布爾; } –
https://angular.io/api/router/CanActivate第一個示例的第15行。 – Bogdan
只要在它下面的行,你可以看到它從許可中返回canActivate函數。看看這個函數返回什麼。 – trichetriche