可以在生成的Register.cshtml.cs文件中手动添加密码策略,修改OnPostAsync方法。具体实现可以通过使用PasswordOptions类来指定要求的密码复杂度,例如:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace MyApp.Areas.Identity.Pages.Account
{
public class RegisterModel : PageModel
{
private readonly SignInManager _signInManager;
private readonly UserManager _userManager;
public RegisterModel(
UserManager userManager,
SignInManager signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
public class InputModel
{
[EmailAddress]
[Display(Name = "Email")]
[Required]
public string Email { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Password")]
[Required]
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 void OnGet(string returnUrl = null)
{
ReturnUrl = returnUrl;
}
public async Task OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
// add password policy
var options = new PasswordOptions
{
RequiredLength = 8,
RequireLowercase = true,
RequireUppercase = true,
RequireDigit = true,
RequireNonAlphanumeric = true
};
var passwordValidator = new PasswordValidator();
passwordValidator.Configure(options);
_userManager.PasswordValidators.Add(passwordValidator);
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
// If we got this far, something failed, redisplay form
return Page();
}
}
}
以上代码先创建一个PasswordOptions对象,并指定要求的密码长度和各种字符的使用情况,然后再使用PasswordValidator类和UserManager.PasswordValidators.Add()方法将密码策略配置到UserManager中。这样,在注册新用户时,会自动验证密码是否符合指定的复杂度要求。
注:以上示例代码中使用了ASP.NET Core Identity,需要在Startup.cs文件中添加相应的服务配置,如下所示:
services.AddDbContext(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores();