ExtJs五(ExtJs Mvc登录优化)

简介: 原文 http://www.cnblogs.com/aehyok/archive/2013/04/21/3034683.html 前言 继上一节中简单的实现了登录之后http://www.cnblogs.com/aehyok/archive/2013/04/20/3033296.html,现在我们可以进行对登录界面进行再次的优化。

原文 http://www.cnblogs.com/aehyok/archive/2013/04/21/3034683.html

前言

继上一节中简单的实现了登录之后http://www.cnblogs.com/aehyok/archive/2013/04/20/3033296.html,现在我们可以进行对登录界面进行再次的优化。

MemerShip配置

 首先打开Web.Config文件,在configuration段内添加一个数据库连接定义,代码如下:

  <connectionStrings>
    <add name="ConnectionString" connectionString="Data Source=MWVCMNFFK0ZAZT5;Initial Catalog=SimpleCMS;Persist Security Info=True;User ID=sa;Password=saa;Pooling=False" providerName="System.Data.SqlClient"></add>
  </connectionStrings>

代码中的数据库地址、用户名和密码请根据自己实际情况填写。然后在system.web段内添加Membership提供者的定义,代码如下:

复制代码
    <membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ConnectionString" 
             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="ConnectionString" 
             applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
复制代码

上面的connectionStringName="ConnectionString" 要与上面配置的数据库链接字符串保持一致。

代码中,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配置。如果刚才的配置正确,现在就可以添加用户和角色了。

单击页面中的安全标签页。

 

 

单击角色中的“创建或管理角色”,先创建系统管理员和普通用户两种角色。返回安全标签页,单击用户中的“创建用户”创建admin和test两个用 户。两个用户的密码都设置为123456,电子邮件随便填吧。还要将admin的角色设置为系统管理员,test的角色设置为普通用户。

然后返回到AccountController中,修改Login的Action的代码如下

复制代码
        public JObject Login(LoginModel model)
        {
            bool success = false;
            JObject errors = new JObject();
            if (ModelState.IsValid)
            {
                string vcode = "";
                if (Session["vcode"] != null)
                {
                    vcode = Session["vcode"].ToString();
                }
                if (vcode.Count() > 0 && vcode.ToLower() == model.Vcode.ToLower())
                {
                    MembershipUser user = Membership.GetUser(model.UserName);
                    if (user != null)
                    {
                        if (user.IsApproved)
                        {
                            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();
                                if (Membership.ValidateUser(model.UserName, model.Password))
                                {
                                    if (Roles.IsUserInRole(model.UserName, "系统管理员 ") | Roles.IsUserInRole(model.UserName, "普通用户"))
                                    {
                                        FormsAuthentication.SetAuthCookie(model.UserName, false);
                                        success = true;
                                    }
                                    else
                                    {
                                        errors.Add("UserName", "您没有权限登录系统。");
                                    }
                                }
                                else
                                {
                                    errors.Add("UserName", "错误的用户名或密码。");
                                    errors.Add("Password", "错误的用户名或密码。");
                                }
                            }
                        }
                    }
                    else
                    {
                        errors.Add("UserName", "错误的用户名或密码。");
                        errors.Add("Password", "错误的用户名或密码。");
                    }
                }
                else
                {
                    errors.Add("Vcode", "验证码错误");
                }
            }
            else
            {
                MyFunction.ModelStateToJObject(ModelState, errors);
            }
            return MyFunction.WriteJObjectResult(success, errors);
        }
复制代码


首先前面还是对验证码的验证。

然后通过MembershipUser user = Membership.GetUser(model.UserName)获得MembershipUser用户对象。

通过验证即可。然后F5运行测试一下。

通过test来测试

然后通过admin来测试

看这就是测试结果。

示例代码下载链接http://files.cnblogs.com/aehyok/ExtJsLoginBetter.rar

目录
相关文章
|
设计模式 前端开发 数据可视化
MVC优化
MVC优化
32 0
|
6月前
|
JavaScript 前端开发 Java
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 和 Ext JS 都是 JavaScript 框架,用于开发 Web 应用程序。它们分别提供了不同的功能和特性,以帮助开发者更高效地构建和维护 Web 应用程序。
49 2
|
6月前
|
前端开发 Java Maven
Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
86 0
|
11月前
|
存储 前端开发 架构师
自定义MVC实现 很详细(下)---优化版
自定义MVC实现 很详细(下)---优化版
|
12月前
|
JavaScript 前端开发 容器
ExtJs 4.x MVC 架构
ExtJs 4.x MVC 架构
|
XML 前端开发 Java
自定义MVC框架优化
自定义MVC框架优化
32 0
|
存储 前端开发 Java
Spring MVC 实战:三种方式获取登录用户信息
前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie、Session、Token,不管哪种方案,都需要获取到用户信息供业务层使用。
474 0
Spring MVC 实战:三种方式获取登录用户信息
|
设计模式 XML 存储
Android实战 | 详解MVC、MVP模式并分别实现登录界面案例
Android实战 | 详解MVC、MVP模式并分别实现登录界面案例
|
前端开发 Java 数据库连接
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
|
XML 前端开发 数据处理
Android——MVC、MVP、MVVM框架实现登录示例
MVC 描述 缺点 优点 MVP 效果图 描述 缺点 优点 代码解析 视图效果图 建立实体类 建立实体类接口 实现实体类接口 设置P层 建立交互接口 数据绑定 MVVM 效果图 描述 代码解析 导入dataBinding 实体类 建立viewmodel xml绑定数据 视图与数据绑定
434 0
Android——MVC、MVP、MVVM框架实现登录示例