在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
使用用户管理器之用户注册
配置数据库在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); 现在,各位可以试试了。 |
请发表评论