asp.net identity 3.0.0 在MVC下的基本使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net identity 3.0.0 在MVC下的基本使用相关的知识,希望对你有一定的参考价值。

注册时信箱转为用户名。

本人习惯使用用户名做注册用户,因为不管是什么终端起码都能少输入几个字符,可以提高用户体验。

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

1、打开Controllers目录下的AccountController.cs

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

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

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

2.vs将在ViewModels文件夹下Account目录下RegisterViewModel.cs模型内的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; }

  这里简单说下,新版的mvc模板把原来的model文件夹拆成了models和viewmodels 两个模型文件夹,这是一个改进。这样就使每个视图有自己的模型,会很方便。

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

<div class="form-group">
        <label asp-for="UserName" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            <input asp-for="UserName" class="form-control" />
            <span asp-validation-for="UserName" class="text-danger"></span>
        </div>
    </div>    

  大家可以看下,这里的代码和之前的已经不一样了,随着TagHelper的更新,这里的代码也变为 asp-for了。TagHelper的资料请参阅这里

4、修改login,因为改为了用户名注册,如果还用email登陆的话,一定出现错误。

首先在ViewModels文件夹下找LoginViewModel.cs,在模型内添加 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模型项去掉或者注释掉,否则你登陆不上去且还不给提示。

5、之后在Views文件夹中的login.cshtml文件中原来为“email”的地方改为“UserName”。

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

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

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

7、求助:因为新的模板引用了jquery-validation来进行数据校验,但这部分我还没有弄明白。所以请了解这部分的朋友给讲解下,如何降低password的强度设置,现在模板中密码需要大小写字母特殊符号。众所周知的,只要不是过分的弱口令,账号密码被盗的可能性并不高。现在很多用户都是手机上网,输入并不方便,所以我很想修改这部分,做了一些尝试,但都没成功,对这部分机制没搞透。因为采用的是jquery-validation验证数据,此功能应该比model中的规则强大,所以给我的感觉是model中的错误信息已经失效,其规则也属象征性验证。

现在,各位可以试试了。

以上是关于asp.net identity 3.0.0 在MVC下的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Identity教程ASP.NET Identity入门

ASP.NET Identity系列教程运用ASP.NET Identity

[ASP.NET MVC] ASP.NET Identity登入技术剖析

如何在 ASP.NET 5 Identity 中设置 PasswordHasherCompatibilityMode.IdentityV3?

ASP.NET Identity 重置密码

使用 Identity Server 4 和 ASP.NET Identity 添加外部登录