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();
}
兩種方法,可以依照系統需求使用,如果有更好的做法,歡迎分享給我!