加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何自定义Asp.net Identity 2用户名已经采取验证消息?

发布时间:2020-12-16 00:32:40 所属栏目:asp.Net 来源:网络整理
导读:我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢 解决方法 那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。 一个可能的解决办法可能是: 执行后 var result = awai
我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢

解决方法

那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。

一个可能的解决办法可能是:

执行后

var result = await UserManager.CreateAsync(user,model.Password);

如果结果不成功,您可以检查它的“错误属性”,“名称XYZ已被占用”。模式,并用您的自定义消息替换它。

另一个解决方案(这是我的首选方法)是编写一个自定义UserValidation类:

/// <summary>
    ///     Validates users before they are saved to an IUserStore
    /// </summary>
    /// <typeparam name="TUser"></typeparam>
    public class CustomUserValidator<TUser> : UserValidator<TUser,string>
        where TUser : ApplicationUser
    {
        /// <summary>
        ///     Constructor
        /// </summary>
        /// <param name="manager"></param>
        public CustomUserValidator(UserManager<TUser,string> manager) : base(manager)
        {
            this.Manager = manager;
        }

        private UserManager<TUser,string> Manager { get; set; }

        /// <summary>
        ///     Validates a user before saving
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public override async Task<IdentityResult> ValidateAsync(TUser item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            var errors = new List<string>();
            await ValidateUserName(item,errors);
            if (RequireUniqueEmail)
            {
                await ValidateEmail(item,errors);
            }
            if (errors.Count > 0)
            {
                return IdentityResult.Failed(errors.ToArray());
            }
            return IdentityResult.Success;
        }

        private async Task ValidateUserName(TUser user,List<string> errors)
        {
            if (string.IsNullOrWhiteSpace(user.UserName))
            {
                errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.PropertyTooShort,"Name"));
            }
            else if (AllowOnlyAlphanumericUserNames && !Regex.IsMatch(user.UserName,@"^[A-Za-z0-9@_.]+$"))
            {
                // If any characters are not letters or digits,its an illegal user name
                errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.InvalidUserName,user.UserName));
            }
            else
            {
                var owner = await Manager.FindByNameAsync(user.UserName);
                if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id,user.Id))
                {
                    errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.DuplicateName,user.UserName));
                }
            }
        }

        // make sure email is not empty,valid,and unique
        private async Task ValidateEmail(TUser user,List<string> errors)
        {
            if (!user.Email.IsNullOrWhiteSpace())
            {
                if (string.IsNullOrWhiteSpace(user.Email))
                {
                    errors.Add(String.Format(CultureInfo.CurrentCulture,"Email"));
                return;
                }
                try
                {
                    var m = new MailAddress(user.Email);
                }
                catch (FormatException)
                {
                    errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.InvalidEmail,email));
                return;
                }
            }
            var owner = await Manager.FindByEmailAsync(user.Email);
            if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id,user.Id))
            {
                errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.DuplicateEmail,email));
            }
        }
    }

您可以看到对于正在使用的所有验证错误消息资源,所以通过在资源中指定自定义格式,您将能够自定义这些消息。

您可以在ApplicationUserManager类中注册验证器,创建方法:

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,IOwinContext context) 
{
   manager.UserValidator = new CustomUserValidator<ApplicationUser>(manager)
   {
       AllowOnlyAlphanumericUserNames = false,RequireUniqueEmail = true
   };
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读