7×24小时服务热线 171 9866 1244
栏目列表
推荐内容

使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系

时间:2012-09-18 15:35来源:黄灯桥的博客 作者:黄灯桥 点击:
登录窗口已经完成了,现在可以完成最后的工作了,主要就是完成Membership提供者的配置。 首先打开Web.Config文件,在configuration段内添加一个数据库连接定义,代码如下: 双击代码全选
登录窗口已经完成了,现在可以完成最后的工作了,主要就是完成Membership提供者的配置。
首先打开Web.Config文件,在configuration段内添加一个数据库连接定义,代码如下:
双击代码全选
1
2
3
4
5
<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提供者的定义,代码如下:

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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"minRequiredNonalphanumeric
Characters=
"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.Windows
TokenRoleProvider"
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的代码,最终代码如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,表示用户不存在,返回用户名和密码错误信息,代码如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (user != null)
    
{
    
}
    
else
    
{
    
   errors.Add("UserName", "错误的用户名或密码。");
    
   errors.Add("Password", "错误的用户名或密码。");
    
}
 


如果用户不为null,表示用户存在。接着检查用户IsApproved属性,看用户是否被禁用了,如果是,返回用户被禁用信息,代码如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
if (user.IsApproved)
    
{
    
}
    
else
    
{
    
   errors.Add("UserName", "用户已被禁用,请与管理员联系。");
    
}
 


接着检查IsLockedOut属性,判断用户是否已被锁定,如果锁定,返回用户被锁定信息,还需要多少分钟解锁,代码如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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方法验证用户名和密码了,也就是把刚才屏蔽掉的那段代码复制到这里。
在验证成功后,还要验证用户的角色是否符合登录后台的要求,目前只运行系统管理员和普通用户登录,因而验证成功后的代码要修改成这样:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (Roles.IsUserInRole(model.UserName, "系统管理员 ") |Roles.IsUserInRole(model.UserName, "普通用户"))
    
{
    
   FormsAuthentication.SetAuthCookie(model.UserName, false);
    
    success =true;
    
}
    
else
    
{
    
   errors.Add("UserName", "您没有权限登录系统。");
    
}
 


至此,整个登录过程就完成了。
本文出自 “黄灯桥的博客” 博客,请务必保留此出处http://dqhuang.blog.51cto.com/2522725/991731

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
关闭
171 9866 1244 工作日:9:00-18:00
点击这里给我发消息

邮箱:
abit@design.com