2013-02-15 43 views
4

使用SimpleMembership開發ASP.Net MVC 4網站,即使用戶已登錄,登錄GET控制器有時也會被調用。到目前爲止,這僅發生在開發過程中(我們不在QA), ,並且只能修改.cshtml頁面。它發生偶爾修改.cshtml頁面後,不一致。SimpleMembership向認證用戶呈現登錄表格

我已經將日誌記錄添加到模板提供的Login()方法中,並且看到用戶確實已通過身份驗證,並具有登錄用戶應擁有的所有角色。

[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     logger.Error("User " + User.Identity.Name + " is authenticated shown login form. Roles: " + string.Join(", ", Roles.GetRolesForUser(User.Identity.Name))); 
     // Temporary work-around: WebSecurity.Logout(); 
    } 

    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

問題

  • 是什麼原因造成這種現象?
  • 這可以發生在生產系統中,例如如果應用程序域被回收?
  • 在從安全角度返回登錄視圖聲音之前調用WebSecurity.Logout()是否有解決方法?
+0

如果User.Identity.IsAuthenticated爲true,我從未見過從ASP.NET運行時重定向。你檢查過來自瀏覽器的網絡請求嗎?即它絕對是一個受保護資源的重定向? – 2013-02-15 08:48:44

+0

我沒有直接觀察它*網絡請求*(它偶爾發生),但它總是發生在刷新視圖時,我做了一個小的編輯(編輯.cshtml)。因此,它總是通過刷新需要認證和特定角色的控制器來觸發。 – 2013-02-15 18:18:23

回答

2

如果要檢查用戶是否登錄,而不是User.Identity試試這個:

if(Request.IsAuthenticated) {...} 

如果任何用戶在瞬間登錄這是真實的。 希望這是你正在尋找的答案!