Asp.net-Mvc
使用 MVC 5 的身份,登錄後無法立即獲取使用者名
我正在嘗試使用 MVC 5 的身份解決方案,但遇到了一些應該非常簡單的問題:我希望 AccountController 上的登錄方法在驗證模型後立即獲取登錄使用者的名稱(我不想從模型中使用它!)。
這是我的一段程式碼:
var result = await SignInManager.PasswordSignInAsync(model.Login, model.Password, false, shouldLockout: false); string NomeUsuario = ""; if (result == SignInStatus.Success) { NomeUsuario = User.Identity.Name; //<== getting the logged user's name }我得到的問題是這個屬性是空的。
經過大量測試,我意識到一些奇怪的事情:如果我驗證兩次,在第二次通過時,它會起作用。但是每次我註銷並嘗試再次登錄時,使用者名都會為空。
有什麼問題有什麼幫助嗎?
在其執行鏈
SignInManager.PasswordSignInAsync方法的末尾呼叫SignInAsync方法,該方法基本上負責設置一個身份驗證 cookie,其中包含關於使用者的多個聲明(其中一個是它的名稱)。您不能User.Identity.Name在同一個呼叫中使用的原因SignInManager.PasswordSignInAsync是User.Identity填寫了來自身份驗證 cookie 的聲明(尚未解析)。它在第二遍中起作用的原因是 cookie 在那裡並且 User.Identity 已正確填充。大多數情況下,成功登錄後會重定向到某個頁面。在此重定向操作中,您將能夠使用User.Identity,因為 cookie 已經設置。