冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

我自己玩mvc5+identity的管理系统笔记2(更改邮箱方式为username方式登录及注册)

项目新建完成后我们运行一下 先看一下注册:

    

 

密码难度明显提升,你也许或想,我不需要真么高强度的密码,我就想要111111作为密码,别着急,后面博客会有介绍.

 输入邮箱和密码就可以注册成功 。

关键代码入下: 

   

   增加了很多异步操作。

一、修改为username进行注册

1.打开AccountViewModels.cs,找到RegisterViewModel中的注册模型的更改。

 public class RegisterViewModel
    {
		 
		#region 扩展

		   [Display(Name = "用户名")]
		public string UserName { get; set; }


		[Display(Name = "电话(手机/固话)")]
		[Phone]
		public string PhoneNumber { get; set; }
		#endregion
		 


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

        [Required]
        [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "确认密码")]
        [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
        public string ConfirmPassword { get; set; }
    }

 2. 然后我们修改Register.cshtml  添加如下代码:下面的代码我们放在邮箱的上面。

 <div class="form-group">
 2                 @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
 3                 <div class="col-md-10">
 4                     @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
 5                 </div>
 6             </div>
 7             <div class="form-group">
 8                 @Html.LabelFor(m => m.PhoneNumber, new { @class = "col-md-2 control-label" })
 9                 <div class="col-md-10">
10                     @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control" })
11                 </div>
12             </div>

  我们点用IE查看,效果已变。

3.修改 Register方法。AccountViewModels.cs中找到Register方法

因为我加入 一个创建时间的datetime非空属性,要取当时的时候,同时我搞了个头像,注册时默认的为某个图像。

 

 

 

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
				var _creatTime = DateTime.Now;
				var _headerPic = "/Content/noheaderpic.png";

				var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber, CreateTime = _creatTime, HeaderPic = _headerPic };
				var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                    
                    // For more information on how to enable account confirmation and password reset please visit https://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);
            }

  

 

 细心的朋友可能已经注意到 , 数据库中有UserName,和PhoneNumber 这两个字段,所以是正常的操作。

 

4.修改注册密码的强度。太烦了,一个字母在写,还要小写字母,还要字符。

在 App_Start/IdentityConfig.cs文件中 ApplicationUserManager.Create 静态方法中:

 

// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
    RequiredLength = 8,
    RequireNonLetterOrDigit = true,  //必须有非字母非数字字符
    RequireDigit = true,   //需要数字
    RequireLowercase = true, //需要小写
    RequireUppercase = true,  //需要大写字母
};
  按要求更改

  我改为了

 // 配置密码的验证逻辑
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 6,
                RequireNonLetterOrDigit = false,
                RequireDigit = false,
                RequireLowercase = false,
                RequireUppercase = false,
            };

 

5.为了让登录后显示的为username,而非邮箱,需要更改登录模型。

在Models下AccountViewModels中,改更   public class LoginViewModel 模型,将EMAIL改为user

[Display(Name = "用户名")]
      public string UserName { get; set; }

然后更改控制器的登录。AccountController  

            // 这不会计入到为执行帐户锁定而统计的登录失败次数中
            // 若要在多次输入错误密码的情况下触发帐户锁定,请更改为 shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
            switch (result)
            {

6.然后更改VIEW视图下面的Login.cshtml  

<h4>使用本地帐户登录。</h4>
           <hr />
           @Html.ValidationSummary(true, "", new { @class = "text-danger" })
           <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>

  

三、在ie中打打开register.

进行注册和登录。

OK,正常了

 

 

posted @ 2017-05-09 22:47  秋天来了哟  阅读(571)  评论(0)    收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com