一步一步使用Ext JS MVC與Asp.Net MVC 3開發簡單的CMS後台管理系統之完成登入功能

來源:互聯網
上載者:User

登入視窗已經完成了,現在可以完成最後的工作了,主要就是完成Membership提供者的配置。

首先開啟Web.Config檔案,在configuration段內添加一個資料庫連接定義,代碼如下:

 <connectionStrings>

    <addname="ApplicationServices"connectionString="Data Source=192.168.0.254;InitialCatalog=SimpleCMS;Persist Security Info=True;User ID=sa;password=abcd-1234;"providerName="System.Data.SqlClient" />

 </connectionStrings>

 

 

代碼中的資料庫地址、使用者名稱和密碼請根據自己實際情況填寫。

然後在system.web段內添加Membership提供者的定義,代碼如下:

 

   <membership>

     <providers>

       <clear />

       <add name="AspNetSqlMembershipProvider"type="System.Web.Security.SqlMembershipProvider"connectionStringName="ApplicationServices"enablePasswordRetrieval="false" enablePasswordReset="true"requiresQuestionAndAnswer="false"requiresUniqueEmail="true" maxInvalidPasswordAttempts="5"minRequiredPasswordLength="6"minRequiredNonalphanumericCharacters="0"passwordAttemptWindow="10" applicationName="/" />

     </providers>

   </membership>

   <roleManager enabled="true">

     <providers>

       <clear />

       <add name="AspNetSqlRoleProvider"type="System.Web.Security.SqlRoleProvider"connectionStringName="ApplicationServices"applicationName="/" />

       <add name="AspNetWindowsTokenRoleProvider"type="System.Web.Security.WindowsTokenRoleProvider"applicationName="/" />

      </providers>

   </roleManager>

 

代碼中,membership段是用來定義Membership提供者的,定義的內容包括,類型(type)為SQLMembershipProvider,表示使用的是SQL Server提供者;資料庫的連接字串(connectionStringName)為剛才定義的連接字串;密碼恢複(enablePasswordRetrieval)為fallse;重設密碼(enablePasswordReset)為true;要求密碼問題(requiresQuestionAndAnswer)為false;要求唯一電子郵件(requiresUniqueEmail)為true;最大的密碼錯誤嘗試次數(maxInvalidPasswordAttempts)為5次;密碼最小長度(minRequiredPasswordLength)為6;密碼最小的非字元個數(minRequiredNonalphanumericCharacters)為0;有效密碼或密碼答案的連續失敗嘗試次數進行跟蹤的時間間隔(passwordAttemptWindow)為10分鐘。最後的applicationName,表示當前應用程式的標識,因為沒有多個應用程式使用該資料庫提供者,因而設定為“/”。

而roleManager段定義的角色提供者,主要定義就是連接字串和應用程式的標識。

完成後,在主菜單中選擇項目,ASP.NET配置,會在瀏覽器中開啟13所示網站管理工具。如果剛才的配置正確,現在就可以添加使用者和角色了。

圖13 網站管理工具

單擊頁面中的安全性標籤頁,將看到14的頁面。

圖14 安全性標籤頁

單擊角色中的“建立或管理角色”,在15所示的頁面中,先建立系統管理員和普通使用者兩種角色。

圖15 建立角色

返回安全性標籤頁,單擊使用者中的“建立使用者”建立admin和test兩個使用者。兩個使用者的密碼都設定為123456,電子郵件隨便填吧。還要將admin的角色設定為系統管理員,test的角色設定為普通使用者。

好了,使用者和角色都有了,可以完成最終的驗證代碼了。回到VS,切換到AccountController.cs檔案,先加入對System.Web.Security的引用,然後修改驗證使用者和密碼的判斷語句,並加上寫入認證Cookies的代碼,最終代碼如下:

    if(Membership.ValidateUser(model.UserName,model.Password))

    {

       FormsAuthentication.SetAuthCookie(model.UserName, true);

       success = true;

    }

    else

    {

       errors.Add("UserName", "錯誤的使用者名稱或密碼。");

       errors.Add("Password", "錯誤的使用者名稱或密碼。");

    }

 

 

好了,簡單驗證過程就完成了,不過,貌似太簡單了點,呵呵。下面搞得複雜點。先把這段語句屏蔽掉,調用Membership的GetUser方法根據使用者名稱傳回型別為MembershipUser使用者物件,代碼如下:

MembershipUser user = Membership.GetUser(model.UserName);

 

接著判斷user是否為null,如果為null,表示使用者不存在,返回使用者名稱和密碼錯誤資訊,代碼如下:

if (user != null)

{

 

}

else

{

   errors.Add("UserName", "錯誤的使用者名稱或密碼。");

   errors.Add("Password", "錯誤的使用者名稱或密碼。");

}

 

 

如果使用者不為null,表示使用者存在。接著檢查使用者IsApproved屬性,看使用者是否被禁用了,如果是,返回使用者被禁用資訊,代碼如下:

if (user.IsApproved)

{

}

else

{

   errors.Add("UserName", "使用者已被禁用,請與管理員聯絡。");

}

 

接著檢查IsLockedOut屬性,判斷使用者是否已被鎖定,如果鎖定,返回使用者被鎖定資訊,還需要多少分鐘解鎖,代碼如下:

TimeSpan ts = user.LastLockoutDate.AddMinutes(60) -DateTime.Now;

if (user.IsLockedOut && ts.Minutes > 0)

{

   errors.Add("UserName", "使用者名稱已被鎖定," + ts.Minutes + "分鐘後才能再次嘗試登入。");

}

else

{

if (user.IsLockedOut)user.UnlockUser();

}

 

代碼中的LastLockoutDate屬性會返回使用者被鎖定的時間,通過AddMinutes方法,加上鎖定時間間隔,當前是60分鐘,就可計算出解鎖時間,將解鎖時間減去目前時間,就可根據它們的差值ts判斷是否已經過瞭解鎖時間了。如果ts大於0,表示還沒達到解鎖時間,否則就意味著已經解鎖,可以繼續驗證了,因而,要調用UnlockUser方法來解鎖使用者。

接著就可調用ValidateUser方法驗證使用者名稱和密碼了,也就是把剛才屏蔽掉的那段代碼複製到這裡。

在驗證成功後,還要驗證使用者的角色是否符合登入背景要求,目前只運行系統管理員和普通使用者登入,因而驗證成功後的代碼要修改成這樣:

if (Roles.IsUserInRole(model.UserName, "系統管理員 ") |Roles.IsUserInRole(model.UserName, "普通使用者"))

{

   FormsAuthentication.SetAuthCookie(model.UserName, false);

    success =true;

}

else

{

   errors.Add("UserName", "您沒有許可權登入系統。");

}

 

至此,整個登入過程就完成了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.