如何在ASP.NET MVC Identity中禁用用户注册验证?
在ASP.NET MVC的Microsoft Identity中禁用用户注册验证的方法
嘿,我之前刚好折腾过这个需求,给你一步步说清楚怎么移除注册界面的验证哈:
1. 修改注册ViewModel的验证特性
首先找到项目里的RegisterViewModel类(通常在Models/AccountModels或者Identity/ViewModels目录下),把里面所有用于验证的数据注解特性删掉或者注释掉。比如原来带验证的代码是这样的:
public class RegisterViewModel { [Required] [EmailAddress] [Display(Name = "Email")] public string Email { get; set; } [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } }
修改后就去掉所有验证特性,变成:
public class RegisterViewModel { [Display(Name = "Email")] public string Email { get; set; } [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "Confirm password")] public string ConfirmPassword { get; set; } }
2. 调整注册Controller的服务器端验证逻辑
接下来找到AccountController(或者Identity相关的Controller)里的Register POST动作方法,移除ModelState.IsValid的检查判断,直接执行用户创建逻辑。原来的代码可能会有这样的判断:
if (ModelState.IsValid) { // 创建用户的逻辑 }
你可以直接删掉这个if判断,把用户创建的代码直接放出来,比如:
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { // 跳过ModelState验证,直接创建用户 var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); return RedirectToAction("Index", "Home"); } // 如果不需要错误提示,也可以删掉下面的错误添加逻辑 AddErrors(result); return View(model); }
3. 移除前端视图的客户端验证
最后打开注册页面的视图Register.cshtml,删掉所有和验证相关的代码:
- 删掉
@Html.ValidationSummary(true, "", new { @class = "text-danger" })这个全局验证提示 - 删掉每个输入框下面的
@Html.ValidationMessageFor(model => model.XXX, "", new { @class = "text-danger" })提示 - 如果视图里引用了客户端验证的脚本(比如
@Scripts.Render("~/bundles/jqueryval")),也要把它删掉,这样前端就不会做实时验证了
注意:生产环境这么做会降低账号安全性,比如允许空密码、无效邮箱注册,一定要谨慎评估业务需求后再操作哦!
内容的提问来源于stack exchange,提问作者Robin Sharma
相关产品推荐
相关产品推荐

