第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

調(diào)用 canActivate 方法后 api 響應(yīng)到達(dá)

調(diào)用 canActivate 方法后 api 響應(yīng)到達(dá)

C#
侃侃無(wú)極 2022-11-13 14:53:56
我真的是個(gè)菜鳥(niǎo)。我編寫了一個(gè)守衛(wèi)服務(wù),以便只有授權(quán)(登錄)的用戶才能訪問(wèn)特定組件。我在后端使用 asp.net,我在服務(wù)器端有一個(gè) api 來(lái)返回授權(quán)狀態(tài),該方法是異步的。問(wèn)題是有時(shí) api 響應(yīng)在調(diào)用 canActivate 方法后到達(dá),因此盡管用戶已獲得授權(quán),但該方法返回 false。@Injectable()export class AuthenticationGuardService implements CanActivate {  isSignedIn: boolean = false;  result: Object;  constructor(private router: Router,private http: HttpClient, @Inject('BASE_URL') private url: string) {    this.http.get(this.url + 'api/Authentication/UserInfo').subscribe(      result => {        if (result != null) {          this.isSignedIn = true;        }      }    )  }  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {    if (!this.isSignedIn) {      this.router.navigate(['sign-in']);    }    return this.isSignedIn;  }}        public async Task<IActionResult> UserInfo()        {            var user = await userManager.GetUserAsync(HttpContext.User);            if (user == null)            {                return null;            }            return Json(new            {                email = user.Email,                name = user.FirstName,                family = user.LastName            });        }
查看完整描述

3 回答

?
莫回?zé)o

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;

     }

  }

 ));

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
飲歌長(zhǎng)嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

從canActivate調(diào)用授權(quán)api,canActivate返回true或false的Promise可以返回。



查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
不負(fù)相思意

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ù)。


查看完整回答
反對(duì) 回復(fù) 2022-11-13
  • 3 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)