Asp.net-Mvc

誰設置了 HttpContext.User.Identity 的 IsAuthenticated 屬性

  • December 28, 2011

本程式碼來自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 屬性。

引用自:https://stackoverflow.com/questions/8660539