.Net Core 更改密码验证程序

.Net Core Change Password Validator

我是 .net Core 的新手,我有一个要求用户更改密码的表单。我需要在后端检查验证。本例中的前端发送 3 个参数(UserID、密码、ConfirmedPWD)。 就 类 和控制器而言,后端需要什么?

我的网络应用程序是 .Net Core 2.1 reactredux 模板。

感谢任何帮助

验证:

  1. *必须有 1 个 Alpha

  2. *必须有 1 个数字

  3. *最少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] 注释将自动为您进行模型状态验证。阅读一下,如果您觉得合适就使用它。