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,现在我们可以进行对登录界面进行再次的优化。

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

时间: 2024-09-28 04:53:34

ExtJs五(ExtJs Mvc登录优化)的相关文章

五招教你优化网站标题 流量翻番

笔者做SEO时间也有两年了,长期观察发现:80%的网站标题很垃圾,15%的标题勉强,只有5%的标题比较优秀,让人侧目.为什么会是这个结果? 因为我们的网站SEO负责人没有对标题重视!但其实,标题不只是一排文字而已,标题是窗口.是广告,是吸引用户点击的最基本入口!辛辛苦苦把排名做上去, 却因为标题差而没有点击和流量,这样的结果你希望吗?笔者以经验总结五招教你优化网站标题,流量翻番. 1.长度 事实证明,长标题比短标题更易吸引用户.有些企业为了突出自己,标题很短,10个字以内,但其实,如果你不是淘宝

开源力量公开课第三十五期-KVM性能优化

问题描述 课程题目:开源力量公开课第三十五期-KVM性能优化开课时间:2013年10月22日19:00-21:30现场或线上参课:现场参加(免费):北京市海淀区海淀西大街70号,3W咖啡二楼(海淀图书城籍海楼对面)线上直播(免费):邮件报名后将即时提供线上参课网址报名:发邮件到osf@osforce.cn,邮件标题:开源力量公开课第35期,邮件正文:在线或现场+姓名+公司+职位+联系电话邮件报名后,我们将即时回复线上参课网址若未收到不要前往现场的邮件,默认表示通过不接受未报名空降,拒绝放鸽子课程

分享五个PHP7性能优化提升技巧_php实例

PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下. 1. Opcache 记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入: zend_extension=opcac

WinForm企业应用框架设计【五】系统登录以及身份验证+源码

索引 WinForm企业应用框架设计[一]界限划分与动态创建WCF服务(no svc!no serviceActivations!) WinForm企业应用框架设计[二]团队内部的约定和客户端按约定识别WCF服务 WinForm企业应用框架设计[三]框架窗体设计:动态创建菜单: WinForm企业应用框架设计[四]动态创建业务窗体 WinForm企业应用框架设计[五]系统登录以及身份验证+源码 闲话休提~ 一:登录的画面与客户端逻辑 为了在打开程序的时候先弹出登录窗体 我们修改了主窗体的构造函数

ExtJs四(ExtJs MVC登录窗口的调试)

原文 http://www.cnblogs.com/aehyok/archive/2013/04/20/3033296.html 前言 继上一节中实现了验证码http://www.cnblogs.com/aehyok/archive/2013/04/19/3030212.html,现在我们可以进行对登录界面进行整合调试了. 正题 打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件.要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数前面加入以下代码:

ExtJs七(ExtJs Mvc创建ViewPort)

原文 http://www.cnblogs.com/aehyok/archive/2013/04/22/3036084.html 前言 在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的.而在 4.1.1,则可直接调用application方法开始执行应用程序,简化了.调用application方法,其参数是一个配置对象,主要配置项有以 下三个: name:用来定义应用程序的名称,在这里是ExtMVCOne. appFol

ExtJs十一(ExtJs Mvc图片管理之一)

原文 http://www.cnblogs.com/aehyok/archive/2013/04/27/3048278.html 前言 图片管理要在两个地方使用:一是标签页内的图片管理,一是文章内容编辑时嵌套到插入图片的窗口内.因而,将图片管理做成一个扩展比较方便.当然,做成MVC模式也行,不争论,不讨论. 要记住,扩展要写在Scripts\ExtJS\Ux目录下,因为在路径的设置中,扩展目录是指向这里的.在该目录下创建一个名为PicManager.js的脚本文件. 片管理的主要界面分两部分,左

ExtJs九(ExtJs Mvc用户管理之一)

原文 http://www.cnblogs.com/aehyok/archive/2013/04/25/3043757.html 首先要做的是为用户信息创建一个模型,在Scripts\app\model目录下创建一个名为User.js的文件,然后添加以下模型定义代码: Ext.define('ExtMVCOne.model.User', { extend: 'Ext.data.Model', fields: [ "id", { name: "Username", d

求教extjs问题:用户登录成功后,用户ID是如何保存的?

问题描述 问题是这样的:当用户登录成功后,用变量保存之,然后在各个控件中使用.问题有二:一.用户登陆成功后,用什么保存用户ID? 我目前用cookies,这方法可用,但是不知道大家有没有更好的办法二.我用cookies读到值后,但是当要在控件中使用的时候,读取不到值.具体代码如下:布局代码:var cookiesuid = "";Ext.onReady(function() { // 修改该空白背景图的路径,指向你服务端一个有效的图片路径. Ext.BLANK_IMAGE_URL =