2012-08-10 66 views
9

我正在使用Facebook C#SDK,並通過他們的Facebook帳戶對用戶進行身份驗證。一旦我執行了所有檢查以「認證」它們,我打電話FormsAuthentication.SetAuthCookie(email, false);什麼在ASP.NET MVC應用程序中設置User.Identity.IsAuthenticated?

執行該調用是否允許我在我的操作中訪問User.Identity.IsAuthenticated?如果我沒有打這個電話呢?

我有一些操作會根據身份驗證狀態返回不同的視圖,並且希望確保User.Identity.IsAuthenticated在MVC 4應用程序中可靠。

回答

15

它是FormsAuthentication HTTP module已註冊並在每個請求上執行。當您在web.config的<authentication>標籤中指定mode="Forms"時,該模塊將自動註冊。正是這個模塊攔截所有401個響應,並自動將用戶重定向到LogOn頁面(由於最終結果是HTTP狀態碼200,有時不是所需的行爲)。

因此,要回答你的問題:

是否執行這一呼籲讓我有機會獲得 我的行動中User.Identity.IsAuthenticated?如果我 沒有打這個電話呢?

不完全是。此調用僅將響應的表單身份驗證Cookie發出。它是負責攔截請求的HTTP模塊,如果此請求包含cookie,它將設置User.Identity

+0

謝謝你,很好的答案。假設訪問者是該網站的全新,沒有身份驗證cookie。 'User.Identity.IsAuthenticated'會爲false還是null?然後,只要FormsAuth HTTP模塊可以讀取/驗證FormsAuth cookie,「User.Identity.IsAuthenticated」將是真實的? – Chaddeus 2012-08-10 06:25:31

+5

User.Identity永遠不爲空。但User.Identity.IsAuthenticated將是錯誤的。 – 2012-08-10 06:31:41

+0

完美,謝謝!你不僅回答了我的問題,而且現在我更全面地理解了formauth,非常感謝。 – Chaddeus 2012-08-10 06:32:38

相關問題