在使用asp.net identity 2.2.0 中,大家可能设计到一些修改和配置

关于Identity的配置,在App_Start文件中的IdentityConfig.cs中,这里几乎有你需要的一切东西。

一、常用的就是密码强度问题:

// 配置密码的验证逻辑
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 6,                   //设置密码长度最小为6
                RequireNonLetterOrDigit = true,   //设置密码是否需要一个非字母或数字字符。
                RequireDigit = true,                     //设置密码是否需要一个数字(0”-“9”)。
                RequireLowercase = true,            //设置密码是否需要一个小写字母(A - Z)。
                RequireUppercase = true,            //设置密码是否需要一个大写字母(A - Z)。
            };

二、注册时信箱转为用户名。

这里需要更改控制器,模型和视图

打开Controller目录下的AccountController.cs找到 public async Task<ActionResult> Register(RegisterViewModel model)这下面的var user = new ApplicationUser { UserName = model.Email, Email = model.Email };这里两个参数都是绑定的email。

1.把var user = new ApplicationUser { UserName = model.Email, Email = model.Email };改为var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };

更改后vs会提示下红波浪线(错误),选择纠错为“生成属性”的哪一项。

2.vs将在Models文件夹下找AccountViewModels模型内的RegisterViewModel中的public class RegisterViewModel 中自动添加   public string UserName { get; set; },好了在上面堆你想要的规则吧。

例如:[Required]
        [StringLength(20, ErrorMessage = "{0} 必须至少包含 {2} 个字符,最多20个字符。", MinimumLength = 6)]
        [Display(Name = "用户账号")]
        [DataType(DataType.Text)]
        public string UserName { get; set; }

3.在Views文件夹中的register.cshtml文件中添加一组代码:

<div class="form-group">
        @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
        </div>
    </div>

至此,这项修改就完成了,注册一个试试吧。

4、改完上面的,还要改下login的,因为改为了用户名注册,这里在用email登陆的话,一定出现错误。

首先在Models文件夹下找AccountViewModels模型内的loginViewModel中的public class loginViewModel 中自动添加   public string UesrName { get; set; },好了在上面堆你想要的规则吧。

例如:[Required]

[StringLength(20, ErrorMessage = "{0} 必须至少包含 {2} 个字符,最多20个字符。", MinimumLength = 6)]

[Display(Name = "用户账号")]

[DataType(DataType.Text)]

public string UserName { get; set; }

在这里设置好后,一定要把原来的email模型项去掉或者注释掉,否则你登陆不上去且还不给提示。

[Required]
        [Display(Name = "电子邮件")]
        [EmailAddress]
        public string Email { get; set; }

5、之后在Views文件夹中的login.cshtml文件中原来为

<div class="form-group">
                    @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
                    </div>
                </div>

改为

<div class="form-group">
                    @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
                    </div>
                </div>

6、打开AccountController.cs文件,找到 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)这个方法

把 var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

改为var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

这样以后登陆和注册都改为用户名形式了。

三、修改用户管理中角色分配时使用用户名称

按照之前的步骤当大家操作“用户管理”中的编辑角色时会发现这里显示的是“电邮地址”而不是用户名。现在我们来改良这个问题。

1.打开“Models”中的“AdminViewModels.cs”文件,找到 “ EditUserViewModel”方法。

注释掉跟“Email”相关的代码并添加“UserName”属性,效果如下: (这里说下,个人喜欢注释掉代码,因为方便使用后悔药。喜欢绝对简洁的朋友,可以直接删除。)

//[Required(AllowEmptyStrings = false)]
        //[Display(Name = "电邮地址")]
        //[EmailAddress]
        //public string Email { get; set; }
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "用户名称")]
        public string UserName { get; set; }

2、修改“controllers”文件夹中的“UserAdminController.cs”中的

原为“public async Task<ActionResult> Edit([Bind(Include = "Email,Id")]EditUserViewModel editUser, params string[] selectedRole)”

改为“public async Task<ActionResult> Edit([Bind(Include = "UserName,Id")]EditUserViewModel editUser, params string[] selectedRole)”

并注释掉该方法中的user.UserName = editUser.Email; user.Email = editUser.Email;然后添加上user.UserName = editUser.UserName;效果如下:

//user.UserName = editUser.Email;
 //user.Email = editUser.Email;
user.UserName = editUser.UserName;

3.打开“Views”文件夹中修改“UsersAdmin”文件夹中的“edit.cshtml”文件中的代码。效果如下:

@*<div class="form-group">
            @Html.LabelFor(model => model.Email, new { @class = "control-label col-md-2" })
            <div class=" col-md-10">
                @Html.TextBoxFor(model => model.Email, new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.Email)
            </div>*@
            <div class="form-group">
                @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })
                <div class=" col-md-10">
                    @Html.TextBoxFor(model => model.UserName, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.UserName)
                </div>
            </div>

至此,用户管理中的“编辑角色”显示的将是用户名了。

四、注册用户的同时将注册用户分配到默认角色中。

1、执行这步以前,需要准备好相关的角色。

2、打开“controllers”文件夹中的“accountcontroller.cs”找到“public async Task<ActionResult> Register(RegisterViewModel model)”方法,并在该方法内添加如下代码,完成后效果如下:

public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                    //将注册用户分配默认的角色
                    var rolesForUser = UserManager.GetRoles(user.Id);
                    if (!rolesForUser.Contains("普通用户"))
                    {
                        UserManager.AddToRole(user.Id, "普通用户");
                    }

                    // 有关如何启用帐户确认和密码重置的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=320771
                    // 发送包含此链接的电子邮件
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "确认你的帐户", "请通过单击 <a href=\"" + callbackUrl + "\">這裏</a>来确认你的帐户");

                    return RedirectToAction("Index", "Home");
                }
                AddErrors(result);
            }

            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return View(model);
        }

好了,注册个用户看看吧。

asp.net identity 2.2.0 中角色启用和基本使用(七)提示点的更多相关文章

  1. asp.net identity 2.2.0 中角色启用和基本使用(六)

    创建用户管理相关视图 第一步:添加视图   打开UsersAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系 ...

  2. asp.net identity 2.2.0 中角色启用和基本使用(四)

    创建角色相关视图 第一步:添加视图   打开RolesAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系统会 ...

  3. asp.net identity 2.2.0 中角色启用和基本使用(三)

    创建控制器 第一步:在controllers文件夹上点右键>添加>控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:RolesAdminController.cs 第二步:添加命 ...

  4. asp.net identity 2.2.0 中角色启用和基本使用(五)

    建立控制器UsersAdminController 第一步:在controllers文件夹上点右键>添加>控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:UsersAdminC ...

  5. asp.net identity 2.2.0 中角色启用和基本使用(二)

    建立模型 第一步:在Models文件夹上点右键 >添加>类     类的名称自定,我用AdminViewModels命名的 因为是讲基本使用,我这里不做任何扩展. 第二步:添加如下命名空间 ...

  6. ASP.NET Identity 身份验证和基于角色的授权

    ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...

  7. MyEclipse6.0中使用aptana插件,添加jquery提示功能

    MyEclipse6.0中使用aptana插件,添加jquery提示功能 第一:查看当前MyEclipse集成的eclipse的版本,, 查看路径    D:/MyEclipse 6.0/eclips ...

  8. asp.net identity 2.2.0 在MVC下的角色启用和基本使用(一)

    基本环境:asp.net 4.5.2 第一步:在App_Start文件夹中的IdentityConfig.cs中添加角色控制器. 在namespace xxx内(即最后一个“}”前面)添加 角色控制类 ...

  9. ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

    在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...

随机推荐

  1. 04 DOM一窥

    BOM 浏览器对象模型 * window       alert(); 弹出框 confirm() 询问框 setInterval("run()",1000); 每隔1秒执行run ...

  2. jQuery实现等比例缩放大图片

      在布局页面时,有时会遇到大图片将页面容器“撑破”的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局. 通常我们 ...

  3. http://jingyan.baidu.com/article/2009576193ee38cb0721b416.html

    http://jingyan.baidu.com/article/2009576193ee38cb0721b416.html

  4. Android获取APK包名的几种方法

    Android获取APK包名的几种方法:1.adb shell pm list package -f | findstr 关键字 #只能获取到包名,主Activity名无法获取到 2.使用aapt-- ...

  5. angularjs指令(一)

    前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容. 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签.借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签. 本篇 ...

  6. Hadoop2.2.0 hive0.12 hbase0.94 配置问题记录

    环境:centos6.2 Hadoop2.2.0 hive0.12 hbase0.94 1>hadoop配好之后,跑任务老失败,yarn失败,报out of memory错误,然后怎么调整内存大 ...

  7. 20145308刘昊阳 《Java程序设计》实验五报告

    20145308刘昊阳 <Java程序设计>实验五 Java网络编程及安全 实验报告 实验名称 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: ...

  8. Android Immersive Mode (沉浸模式) 还是 Translucent Bars (透明状态栏)

    Immersive Mode (沉浸模式) 还是 Translucent Bars (透明状态栏) [科普]什么叫真正的“沉浸式”状态栏? 为什么在国内会有很多用户把「透明栏」(Translucent ...

  9. ACM: I Hate It 解题报告 - 线段树

    I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  10. cdoj 树上战争(Battle on the tree) Label:并查集?

    给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜. Input 输入包含多组数据 每组第 ...