Asp.net core mvc 如何在验证用户时验证任意条件?

Asp.net core mvc 如何在验证用户时验证任意条件?,asp.net-core-mvc,asp.net-core-identity,Asp.net Core Mvc,Asp.net Core Identity,假设我有一个ASP.NET MVC核心应用程序,我想在允许身份验证时验证某些自定义条件。例如,提供一对有效凭据但被应用程序管理员禁用的用户,或指示该用户付款最新的标志,或任何其他任意条件。ASP.NET Core Identity中是否有可以挂接此自定义验证的位置?我必须为本地和外部身份验证工作。对于您的情况,您可以创建自定义用户验证程序 为ASP.NET核心标识编写自定义验证程序 要求电子邮件地址以@example.com结尾的自定义用户验证程序 这遵循Identity中的一种常见模式,您可以

假设我有一个ASP.NET MVC核心应用程序,我想在允许身份验证时验证某些自定义条件。例如,提供一对有效凭据但被应用程序管理员禁用的用户,或指示该用户付款最新的标志,或任何其他任意条件。ASP.NET Core Identity中是否有可以挂接此自定义验证的位置?我必须为本地和外部身份验证工作。

对于您的情况,您可以创建自定义用户验证程序

为ASP.NET核心标识编写自定义验证程序

要求电子邮件地址以@example.com结尾的自定义用户验证程序

这遵循Identity中的一种常见模式,您可以实现接口(在本例中为
IValidator
)并提供所有验证代码,或者覆盖它的基本实现并通过覆盖方法添加其他逻辑,就像我在这里做的那样

public class CustomUserValidator : UserValidator<ApplicationUser>
{
  public override async Task<IdentityResult> ValidateAsync(UserManager<ApplicationUser> manager, 
    ApplicationUser user)
  {
    IdentityResult baseResult = await base.ValidateAsync(manager, user);
    List<IdentityError> errors = new List<IdentityError>(baseResult.Errors);

    if (!user.Email.EndsWith("@example.com"))
    {
      IdentityError invalidEmailError = Describer.InvalidEmail(user.Email);
      invalidEmailError.Description += " Email address must end with @example.com";
      errors.Add(invalidEmailError);
    }

    return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success;
  }
}

这将把
CustomUserValidator
的实现添加到内部服务集合中,允许在需要
IUserValidator
的任何地方注入它。

Hi,@Léster,如果您有关于此问题的最新信息,请通知我们。
services.AddTransient<IUserValidator<ApplicationUser>, CustomUserValidator>();