Identity IsAuthenticated 登出後還是 true

User.Identity.IsAuthenticated signout is true

在使用.net的登入、登出功能時,我們常常使用 User.Identity.IsAuthenticated 來判斷是否有對應權限,可能會用在前端(razor、 razor page)或後端,

工作時剛好遇到

public async Task<IActionResult> Logout() { 
   await _signManager.SignOutAsync(); 
   return Page();
} 

理論上應該算登出成功了,但頁面產生時前端的判斷有權限才產生的html依舊產生了,

原本以為是非同步,資料可能還沒改變造成異常,後來還使用了 delay來進行測試,依舊一樣,

public async Task<IActionResult> Logout() { 
   await _signManager.SignOutAsync(); 

   var isAuthenticated = context.User.Identity.IsAuthenticated;
   //isAuthenticated = true;

   return Page();
} 

沒錯! 即便登出了,isAuthenticated 依舊是true,去查了一下文章才發現,登出只是將登出資訊給予Client並不會更新User內資訊,

所以去找了一下怎樣處理比較適當,畢竟isAuthenticated 這參數是不能改的...

找到兩種做法

一種是使用Redirect重新觸發驗證身份功能

另一種是 登出後 塞一個新個使用者

public async Task<IActionResult> Logout() { 
   await _signManager.SignOutAsync(); 

   //var isAuthenticated = context.User.Identity.IsAuthenticated;
   //isAuthenticated = true;

   HttpContext.User = new System.Security.Principal
           .GenericPrincipal(new System.Security.Principal.GenericIdentity(string.Empty), null);

   return Page();
} 

兩種方法,可以依照系統需求使用,如果有更好的做法,歡迎分享給我!