• 一步一步使用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", "您没有权限登录系统。");

    }

    至此,整个登录过程就完成了。
  • 相关阅读:
    CF351E Jeff and Permutation
    2018-8-10-win10-uwp-绑定-OneWay-无法使用
    2018-8-10-win10-uwp-绑定-OneWay-无法使用
    2018-2-13-C#-通配符转正则
    2018-2-13-C#-通配符转正则
    2019-9-2-win10-uwp-列表模板选择器
    2019-9-2-win10-uwp-列表模板选择器
    2018-2-13-win10-uwp-InkCanvas控件数据绑定
    2018-2-13-win10-uwp-InkCanvas控件数据绑定
    2018-2-13-win10-uwp-unix-timestamp-时间戳-转-DateTime
  • 原文地址:https://www.cnblogs.com/muyuge/p/6333753.html
Copyright © 2020-2023  润新知