.Net Core更改密码验证器

时间:2018-07-24 14:50:37

标签: validation .net-core react-redux asp.net-identity change-password

我是.net Core的新手,我有一个表格要求用户更改密码。我需要在后端检查验证。在这种情况下,前端发送3个参数(用户ID,密码,ConfirmedPWD)。 在类和控制器方面,后端需要什么?

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

感谢任何帮助

验证:

  1. *必须具有1个Alpha

  2. *必须有1个数字

  3. *最少8个,最多16

CustomPasswordValidator类别:

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);
    }
}

2 个答案:

答案 0 :(得分:1)

我建议使用 FluentValidation 库,您可以在其中声明性地指定此类复杂方案。

Install-Package FluentValidation.AspNetCore

您的请求类别。

public class ChangePasswordRequest
{
    public string UserId { get; set; }
    public string Password { get; set; }
    public string ConfirmedPWD { get; set; }
}

您可以使用流利的验证来创建自己的验证类。您还可以添加异常消息。

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();
    }

答案 1 :(得分:1)

当您使用.net core时,不必像下面那样显式检查ModelState

[HttpPost]
    public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest();
        }

        return Ok();
    }

控制器上的[ApiController]批注将自动为您执行模型状态验证。仔细阅读并使用它。