一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...
登錄窗口已經完成了,現在可以完成最后的工作了,主要就是完成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", "您沒有權限登錄系統。");
}
?
至此,整個登錄過程就完成了。
轉載于:https://blog.51cto.com/dqhuang/991731
總結
以上是生活随笔為你收集整理的一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c primer plus(第五版)读书
- 下一篇: 更新系统时跳过某个软件包