如何自定义Asp.net Identity 2用户名已经采取验证消息?
发布时间:2020-05-23 17:27:22 所属栏目:asp.Net 来源:互联网
导读:我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢 那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。 一个可能的解决办法可能是: 执行后 var result = await UserMana
|
我如何自定义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
};
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – app.UseErrorHandler()可以访问错误详细信
- asp.net-mvc-3 – MVC3 Razor使用Html.BeginForm问题
- asp.net-mvc – MVC 5 Owin Facebook Auth导致空参考异常
- asp.net-mvc – 如何使输入字段仅允许使用EF和数据注释的数
- asp.net-mvc – ASP.NET MVC.如何创建接受和multipart / fo
- asp.net-mvc – MS Ajax与jQuery在ASP.NET MVC应用程序中的
- asp.net-mvc – 使用类似MvcContrib Grid的东西在代码可读性
- 在MVC中使用Json.Net序列化和反序列化Json对象
- asp.net-mvc – 模型和视图模型之间的区别
- asp.net-mvc – 实体类型没有键定义 – 代码优先
推荐文章
站长推荐
- asp.net – 如何在EF DbContext和AspNet Members
- asp.net – 如果我没有指定targetFramework =“4
- asp.net – Crystal Reports“加载报告失败”错误
- asp.net-mvc – ASP.NET MVC:ValidationAttribu
- asp.net-mvc – 返回空ActionResult
- Asp.net从Https重定向到Http
- asp.net-mvc – 从Asp.Net Mvc应用程序找不到Dat
- asp.net – 使用Razor有点像回到经典的asp
- asp.net – AsyncPostBackTrigger找不到LinkButt
- asp.net-mvc – 在Hub,SignalR之外获取connectio
热点阅读
