3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
canActivate 接受布爾值或可觀察的布爾值,避免訂閱試試這個(gè)
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean>{
return this.http.get(this.url + 'api/Authentication/UserInfo').pipe(map(
(result) => {
if (result != null) {
return true;
} else {
this.router.navigate(['sign-in']);
return false;
}
}
));
}

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
從canActivate調(diào)用授權(quán)api,canActivate返回true或false的Promise可以返回。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
isSignedIn
這里的問(wèn)題是 API 調(diào)用和變量評(píng)估之間存在競(jìng)爭(zhēng)條件。我們可以解決這個(gè)問(wèn)題。
如果您查看 Guard 的文檔,CanActivate
您會(huì)發(fā)現(xiàn) anObservable<boolean>
是可能的返回類型之一。因此,刪除HTTP
構(gòu)造函數(shù)中的代碼,將您的方法返回類型更改為,而不是像您所做Observable<boolean>
的那樣返回變量,執(zhí)行以下操作:isSignedIn
如果您的 API 調(diào)用直接返回一個(gè)布爾值:
return this.http.get(this.url + 'api/Authentication/UserInfo');
如果由于某種原因您的 API 沒(méi)有直接返回布爾值:
return this.http .get(this.url + 'api/Authentication/UserInfo') .pipe(result => !!result);
通過(guò)返回一個(gè)Observable<boolean>
back,我們告訴 Angular 我們將在某個(gè)時(shí)候返回一個(gè)布爾值,但我們只是不知道確切的時(shí)間。所以在這種情況下,它會(huì)等到解決后再繼續(xù)。
- 3 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)