誰設置了 HttpContext.User.Identity 的 IsAuthenticated 屬性
本程式碼來自asp.net mvc RTM源碼
誰設置了 HttpContext.User.Identity 的 IsAuthenticated 屬性?
protected virtual bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null) { throw new ArgumentNullException("httpContext"); } IPrincipal user = httpContext.User; if (!user.Identity.IsAuthenticated) { return false; } }IsAuthenticated 屬性是否通過呼叫方法設置(asp.net mvc 4.0 範例項目):
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);當我在上述 FormsAuth… 方法呼叫後調試 asp.net mvc 4.0 範例項目的**LogOn方法的程式碼時。**的執行
User.Identity.IsAuthenticated仍然返回 FALSE。只有當我調試LogOff方法時
User.Identity.IsAuthenticated說真的。那麼誰將此屬性設置為 TRUE 和 WHEN 呢?
更新:
這是關於FORMS認證的!
我現在確實調試了 asp.net mvc 範例項目的 LogOn 方法,在返回 LogOn 操作後,我已覆蓋的 AuthorizeCore 方法被呼叫,然後 IsAuthenticated 屬性為 TRUE!
TRUE 的設置是否取決於 ModelState.Value.Error 集合?
如果錯誤集合中的 count == 0,則 IsAuthenticated 為 TRUE,否則 IsAuthenticated 為 FALSE
你能證實嗎?
此屬性由表單身份驗證模組通過從請求中讀取和解析表單身份驗證 cookie 來設置。我用粗體表示了請求,因為我懷疑這就是你觀察這種行為的原因。讓我解釋。當您呼叫
FormsAuthentication.SetAuthCookie成功的身份驗證時,您將身份驗證 cookie 添加到響應中。此 cookie 將儲存在客戶端瀏覽器中,並將在後續發送要求。因此,只有在後續請求中,使用者才會被視為已通過身份驗證。因此,您需要在呼叫 SetAuthCookie 方法後始終進行重定向。在呼叫此方法的請求中,您已經知道使用者是否提供了正確的憑據,因此您無需檢查 IsAuthenticated 屬性。