我自己玩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,正常了

浙公网安备 33010602011771号