2014-03-06 73 views
0

所以我使用c#,MVC和sqlexpress在.NET中構建了一個Web應用程序。我希望用戶能夠登錄並根據他們屬於哪個組,查看UI的某些部分。一旦驗證就保存會話數據.net

我已經爲我的數據庫中的組和用戶創建了表,使用ADO.NET嚮導爲這些表創建模型以創建模型。

我添加了一個控制器,該控制器具有檢查用戶是否存在的方法,以及他的密碼是否正確。我的問題是如何存儲用戶通過「©正確」方式驗證的信息?

目前,我只是在System.Web.Mvc.Controller提供的會話變量中創建一個新對象。我創建了一個標誌對象Session["Authenticated"] = true,並創建了另一個對象,該對象將信息(用戶名,組聯繫等)保存爲Session["User"]

我偶然發現了描述實現您自己的會員供應商(herehere)的文章,但我覺得我需要打破現有的密碼安全和帳戶控制類,以便在自定義成員資格提供者。

是否需要自定義成員資格提供程序實施,還是保存在會話中的數據足夠好?

+0

自定義的成員提供的想法是使用現有的會員提供與自己的數據方案。您可以將會員/角色存儲在Cookie中並從中檢索。我會建議不要使用會話變量。 – lopezbertoni

回答

0

如果您不想遵循成員資格提供者路線,更好的方法是查看錶單身份驗證(http://msdn.microsoft.com/en-us/library/xdt4thhy(v=vs.100).aspx)。

+0

從我得到的代碼中,'FormsAuthentication.RedirectFromLoginPage(UserEmail.Text,Persist.Checked)'將用戶信息保存在某處,但是我仍然無法保存他所屬的組。 –

0

首先保存有關用戶的角色和權限,然後編寫自定義Action過濾器,其中檢查如果用戶有訪問控制器方法的權限,如果是則繼續如果沒有則繼續生成異常和響應消息。

當用戶登錄,然後也獲取當前用戶角色和權限,並將其保存在會話中的自定義過濾器或您的按鈕和選項卡從會話用戶查詢權限或沒有,如果用戶有許可,則顯示標籤,否則隱藏它。 這裏是鏈接爲例
Action Filters
Filters Example Code Project

0

來實現在ASP.NET MVC項目的認證和授權的最簡單的方法之一是使用inbuild窗體身份驗證模塊。當您創建一個新的ASP.NET MVC項目時,它已經包含了開始使用Forms Auth所需的全部內容。

它所要做的就是創建某些表(5),並且您永遠不必擔心或在代碼中跟蹤它們。它非常簡單。您始終可以將由ASP.NET MVC成員資格提供者創建的用戶映射到您自己的UserMaster表。

接下來,您所要做的就是標記您的ActionMethod或Controller,或者在global.asax屬性中設置[Authorize]屬性,然後全部設置。

代碼將是簡單:

進行登錄:

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, 
               persistCookie: model.RememberMe)) 
     { 
      ///rest of the logic 
     } 
} 

也低於是這會派上用場一些的Userful功能:

if(WebSecurity.UserExists(username)){ /// ur logic } 
//or 
WebSecurity.CreateUserAndAccount(username, password); 
//or 
System.Web.Security.Roles.AddUserToRole(username, UserRole); 

你猜怎麼着,你不不必擔心在某些HttpModule中設置某個標誌,或者首先執行函數以查看會話User是否存在,[Authorize]屬性ta凱斯關心這一點。

映射定製UserMaster

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, 
              persistCookie: model.RememberMe)) 
{ 
    try 
    { 
     try 
     { 
      //below is my custom method IsValidUser with my own logic for 
      // valid user 
      MembershipCore.IsValidUser(model.UserName); 
      if (MembershipCore.isFirstTimeLogin(model.UserName)) 
      { 
        //Show License Screen in a window 
        return RedirectToAction("License"); 

       } 
       //my custom method setting custom Session variables 
       MembershipCore.SetLoggedInUser(model.UserName); 
      } 
     } 
} 
+0

當你說「你總是可以將由ASP.NET MVC成員提供者創建的用戶映射到你自己的'UserMaster'表」時,我不理解這個部分。怎麼會這樣做呢? –

+0

手動。每當您使用WebSecurity類創建新用戶時,同時在成功創建後,將用戶添加到UserMaster表中,其中包含所有這些字段,firstLogin,Activated,LastLogin等。無論何時用戶登錄,在WebSecurity.Login之後,還要爲用戶驗證UserMaster字段。並且,使這兩個手動過程成爲原子,即如果其中任何一個失敗,則使其他失敗。 –

+0

@DenisKralj,查看我的更新回答 –