zoukankan      html  css  js  c++  java
  • .net core 1.0 中的asp.net identity 基本使用(一)

    使用用户管理器之用户注册

    配置数据库在appsettings.json,系统默认生成的是连接到sqlserver服务中的数据库。如果想连接到.mdb文件上(便携型数据库)请参照我的另一篇博文《.net 和 core 数据库连接字符串 》中关于《Asp.net Core 数据库离线文件的连接(特别感谢“张不水”兄的大力帮助。)》的部分。

    1、修改密码强度和用户邮箱验证规则:(微软官方示例采用的是后面的方式)

    打开Startup.cs,在public class Startup{}内找public void ConfigureServices(IServiceCollection services){}修改services.AddIdentity<ApplicationUser, IdentityRole>()为如下代码:

     1             services.AddIdentity<ApplicationUser, IdentityRole>(options =>
     2             {
     3                 // 配置身份选项
     4                 // 密码配置
     5                 options.Password.RequireDigit = false;//是否需要数字(0-9).
     6                 options.Password.RequiredLength = 6;//设置密码长度最小为6
     7                 options.Password.RequireNonAlphanumeric = false;//是否包含非字母或数字字符。
     8                 options.Password.RequireUppercase = false;//是否需要大写字母(A-Z).
     9                 options.Password.RequireLowercase = false;//是否需要小写字母(a-z).
    10 
    11                 // 锁定设置
    12                 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);//账户锁定时长30分钟
    13                 options.Lockout.MaxFailedAccessAttempts = 10;//10次失败的尝试将账户锁定
    14 
    15                 // Cookie常用设置
    16                 options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);//Cookie 保持有效的时间150天。
    17                 options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";//在进行登录时自动重定向。
    18                 options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOff";//在进行注销时自动重定向。
    19 
    20                 //cookie扩展设置(通常不用)
    21                 options.Cookies.ApplicationCookie.CookieName = "YouAppCookieName";//用于保持身份的 Cookie 名称。 默认值为“.AspNet.Cookies”。 
    22                 options.Cookies.ApplicationCookie.AccessDeniedPath = "/Account/AccessDenied";//被拒绝访问或路径无效后的重定向。
    23                 options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;//自动认证
    24                 options.Cookies.ApplicationCookie.AuthenticationScheme = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme;//选定认证方案的名称。
    25                 options.Cookies.ApplicationCookie.ReturnUrlParameter = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.ReturnUrlParameter;//登陆或退出后执行动作返回到原来的地址。
    26 
    27                 // 用户设置
    28                 options.User.RequireUniqueEmail = true; //是否Email地址必须唯一
    29             })

     或者在AddDefaultTokenProviders();的后面   services.AddMvc();前面添加如下代码(微软官方示例代码形式,推荐)

     1 services.Configure<IdentityOptions>(options =>
     2             {
     3                 // 配置身份选项
     4                 // 密码配置
     5                 options.Password.RequireDigit = false;//是否需要数字(0-9).
     6                 options.Password.RequiredLength = 6;//设置密码长度最小为6
     7                 options.Password.RequireNonAlphanumeric = false;//是否包含非字母或数字字符。
     8                 options.Password.RequireUppercase = false;//是否需要大写字母(A-Z).
     9                 options.Password.RequireLowercase = false;//是否需要小写字母(a-z).
    10 
    11                 // 锁定设置
    12                 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);//账户锁定时长30分钟
    13                 options.Lockout.MaxFailedAccessAttempts = 10;//10次失败的尝试将账户锁定
    14 
    15                 // Cookie常用设置
    16                 options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);//Cookie 保持有效的时间150天。
    17                 options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";//在进行登录时自动重定向。
    18                 options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOff";//在进行注销时自动重定向。
    19 
    20                 // 用户设置
    21                 options.User.RequireUniqueEmail = true; //是否Email地址必须唯一
    22             });

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

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

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

    更改后vs会提示下红波浪线(错误),选择纠错为“生成属性”的哪一项。注意:自动生成会是public string UserName { get; internal set; } 必须把internal set改为set,否则后期无法获取到值。

      

    3、修改用户注册的数据模型:修改Models文件夹下AccountViewModels目录下RegisterViewModel.cs模型内的public class RegisterViewModel 中添加   public string UserName { get; set; },好了在上面堆你想要的规则吧。

    1         [Required]
    2         [StringLength(20, ErrorMessage = "{0} 必须至少包含 {2} 个字符,最多20个字符。", MinimumLength = 6)]
    3         [Display(Name = "用户账号")]
    4         [DataType(DataType.Text)]
    5         [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage = "用户名由字母或数字组成。")]
    6         public string UserName { get; set; }

     为方便大家这是修改好的代码

     1 public class RegisterViewModel
     2     {
     3         [Required]
     4         [EmailAddress]
     5         [Display(Name = "电子信箱")]
     6         public string Email { get; set; }
     7 
     8         [Required]
     9         [StringLength(100, ErrorMessage = "请在 {0} 填入最少 {2} 最大 {1} 个字符。", MinimumLength = 6)]
    10         [DataType(DataType.Password)]
    11         [Display(Name = "用户密码")]
    12         public string Password { get; set; }
    13 
    14         [DataType(DataType.Password)]
    15         [Display(Name = "确认密码")]
    16         [Compare("Password", ErrorMessage = "请确保和用户密码一致。")]
    17         public string ConfirmPassword { get; set; }
    18 
    19         [Required]
    20         [StringLength(20, ErrorMessage = "请在 {0} 填入最少 {2} 最大 {1} 个字符。", MinimumLength = 6)]
    21         [Display(Name = "用户账号")]
    22         [DataType(DataType.Text)]
    23         [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage = "用户名由字母或数字组成。")]
    24         public string UserName { get; set; }
    25     }

    4、在Views文件夹的Account中的register.cshtml文件中添加“用户账号”代码:

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

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

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

    首先在ViewModels文件夹下找LoginViewModel.cs,在模型内添加 public string UesrName { get; set; },好了在上面堆你想要的规则吧。

    1  [Required]
    2  [StringLength(20, ErrorMessage = "{0} 必须至少包含 {2} 个字符,最多20个字符。", MinimumLength = 6)]
    3  [Display(Name = "用户账号")]
    4  [DataType(DataType.Text)]
    5  [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage ="用户名由字母或数字组成。")]
    6  public string UserName { get; set; }

    接着把email模型项去掉或者注释掉,否则你登陆不上去且还不给提示。 

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

    7、打开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);

    现在,各位可以试试了。

  • 相关阅读:
    第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)
    第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)
    第十一节:深究用户模式锁的使用场景(异变结构、互锁、旋转锁)
    第十节:利用async和await简化异步编程模式的几种写法
    第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
    C# DataTable列名不区分大小写
    如何很好的使用Linq的Distinct方法
    Java读写记事本文件
    c# 获取方法所在的命名空间 类名 方法名
    C#中类的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/chonghanyu/p/5639598.html
Copyright © 2011-2022 走看看