2014-10-16 85 views
1

我對MVC沒有經驗,我正在嘗試創建一個主索引頁和各種子頁面的項目,所有這些都需要用戶進行日誌記錄以及登錄/註冊頁面這是每個人的切入點。MVC 4授權和登錄使用

我一直在尋找如何檢查和用戶重定向到登錄頁面,當他們嘗試直接訪問其他網頁,或當會話變量過期,我這樣做:

[Authorize] 
public class HomeController : Controller 
{ 
} 

Web.config文件:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Home/Login" timeout="2880" /> 
    </authentication> 
</system.web> 

而且我期待的是,如果用戶沒有登錄,他們重定向到~/Home/Login,但我不認爲這正在發生,我得到的錯誤這些頁面,因爲我試圖使用會話變量來顯示他們的用戶名在頁面等

在登錄的代碼,我有:

//after I found the user in my database and confirmed his password 
FormsAuthentication.SetAuthCookie(user.userName, false); 

Session["User"] = user; 
return View("Index"); 

我發現如何實現自定義授權,登錄和這樣的各種解決方案,但我不知道如果這些解決方案已經可以在這個MVC版本上使用(我使用的是4.0),我想盡可能保持最簡單的方式,因爲我還在學習。

所以基本上我想檢查用戶是否登錄了所有頁面,但是登錄頁面,如果他不是,則將他重定向到登錄頁面。

如何使用MVC功能來完成此操作?

回答

1

在您的登錄操作方法中,您需要使用[AlloyAnonymous]進行修飾。從認證/授權中刪除Session的概念。您不需要在會話中存儲用戶對象,它已經存儲在HttpContext中。

+0

你能否詳細說明一下?我見過一些指南解釋說,有一種方法是每個控制器/方法都被自動設置爲僅授權,而我指定允許匿名調用哪些控制器/方法,但是我找不到我設置的位置。 – Danicco 2014-10-16 17:40:01

+0

您可以通過我提到的屬性匿名設置哪些方法。相反,如果你想指定哪些方法需要授權,你可以使用[Authorize]屬性和你需要的任何角色[Authorize(「ADMINS」)] – 2014-10-16 17:46:30

+0

啊,我不必配置它......這太好了。我仍然有問題,但我的路由配置默認爲「索引」功能。我的'''''有'[Authorize]'屬性的'Index',我想根據我的web.config中的規定將用戶(未記錄)發送到'〜/ Home/Login',但它不是工作......它仍然通過'Index'函數,就好像'[Authorize]'沒有工作。你會知道爲什麼會發生這種情況? – Danicco 2014-10-16 17:50:58