.Net Core 更改密码验证程序
.Net Core Change Password Validator
我是 .net Core 的新手,我有一个要求用户更改密码的表单。我需要在后端检查验证。本例中的前端发送 3 个参数(UserID、密码、ConfirmedPWD)。
就 类 和控制器而言,后端需要什么?
我的网络应用程序是 .Net Core 2.1 reactredux 模板。
感谢任何帮助
验证:
*必须有 1 个 Alpha
*必须有 1 个数字
*最少8个,最多16个
自定义密码验证器Class:
public class CustomPasswordValidator
{
public int RequiredLength { get; set; }
public CustomPasswordValidator(int length)
{
RequiredLength = length;
}
public Task<IdentityResult> ValidateAsync(string item)
{
if (String.IsNullOrEmpty(item) || item.Length < RequiredLength)
{
List<string> errors = new List<string>() { "Password should be of length {0}" };
return Task.FromResult(IdentityResult.Failed());
}
string pattern = @"^(?=.*[0-9])(?=.*[!@#$%^&*])[0-9a-zA-Z!@#$%^&*0-9]{10,}$";
if (!Regex.IsMatch(item, pattern))
{
return Task.FromResult(IdentityResult.Failed());
}
return Task.FromResult(IdentityResult.Success);
}
}
我推荐 FluentValidation 库,您可以在其中以声明方式指定此类复杂场景。
Install-Package FluentValidation.AspNetCore
您的要求class.
public class ChangePasswordRequest
{
public string UserId { get; set; }
public string Password { get; set; }
public string ConfirmedPWD { get; set; }
}
您可以使用流畅的验证创建自己的验证 class。您还可以添加异常消息。
public class ChangePasswordRequestValidator : AbstractValidator<ChangePasswordRequest>
{
public ChangePasswordRequestValidator()
{
RuleFor(x => x.Password).Password();
}
}
public static class RuleBuilderExtensions
{
public static IRuleBuilder<T, string> Password<T>(this IRuleBuilder<T, string> ruleBuilder)
{
var options = ruleBuilder
.NotEmpty()
.NotNull()
.MinimumLength(8)
.MaximumLength(16)
.Matches("^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$").WithMessage("regex error");
return options;
}
}
一些配置...
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddFluentValidation(fvc =>
fvc.RegisterValidatorsFromAssemblyContaining<Startup>());
}
最后,您可以使用 ModelState.IsValid
检查您的模型
[HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
当您使用.net core 时,您不必像
那样显式检查 ModelState
[HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
控制器上的 [ApiController] 注释将自动为您进行模型状态验证。阅读一下,如果您觉得合适就使用它。
我是 .net Core 的新手,我有一个要求用户更改密码的表单。我需要在后端检查验证。本例中的前端发送 3 个参数(UserID、密码、ConfirmedPWD)。 就 类 和控制器而言,后端需要什么?
我的网络应用程序是 .Net Core 2.1 reactredux 模板。
感谢任何帮助
验证:
*必须有 1 个 Alpha
*必须有 1 个数字
*最少8个,最多16个
自定义密码验证器Class:
public class CustomPasswordValidator
{
public int RequiredLength { get; set; }
public CustomPasswordValidator(int length)
{
RequiredLength = length;
}
public Task<IdentityResult> ValidateAsync(string item)
{
if (String.IsNullOrEmpty(item) || item.Length < RequiredLength)
{
List<string> errors = new List<string>() { "Password should be of length {0}" };
return Task.FromResult(IdentityResult.Failed());
}
string pattern = @"^(?=.*[0-9])(?=.*[!@#$%^&*])[0-9a-zA-Z!@#$%^&*0-9]{10,}$";
if (!Regex.IsMatch(item, pattern))
{
return Task.FromResult(IdentityResult.Failed());
}
return Task.FromResult(IdentityResult.Success);
}
}
我推荐 FluentValidation 库,您可以在其中以声明方式指定此类复杂场景。
Install-Package FluentValidation.AspNetCore
您的要求class.
public class ChangePasswordRequest
{
public string UserId { get; set; }
public string Password { get; set; }
public string ConfirmedPWD { get; set; }
}
您可以使用流畅的验证创建自己的验证 class。您还可以添加异常消息。
public class ChangePasswordRequestValidator : AbstractValidator<ChangePasswordRequest>
{
public ChangePasswordRequestValidator()
{
RuleFor(x => x.Password).Password();
}
}
public static class RuleBuilderExtensions
{
public static IRuleBuilder<T, string> Password<T>(this IRuleBuilder<T, string> ruleBuilder)
{
var options = ruleBuilder
.NotEmpty()
.NotNull()
.MinimumLength(8)
.MaximumLength(16)
.Matches("^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$").WithMessage("regex error");
return options;
}
}
一些配置...
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddFluentValidation(fvc =>
fvc.RegisterValidatorsFromAssemblyContaining<Startup>());
}
最后,您可以使用 ModelState.IsValid
检查您的模型 [HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
当您使用.net core 时,您不必像
那样显式检查 ModelState[HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
控制器上的 [ApiController] 注释将自动为您进行模型状态验证。阅读一下,如果您觉得合适就使用它。