c# - 如何更改剃须刀页面中注册页面的身份错误
问题描述
我有一个基本问题。我想自定义IdentityResult
添加到ModelState
. 这是我的代码(foreach
添加else
错误):
var user = new IdentityUser {UserName = Input.Phone, PhoneNumber = Input.Phone};
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
//Do something...
}
else
{
foreach (var error in result.Errors)
{
//how can I change error.Description?
ModelState.AddModelError(string.Empty, error.Description);
}
}
解决方案
您可以覆盖IdentityErrorDescriber
更改身份错误消息的方法。
public class YourIdentityErrorDescriber : IdentityErrorDescriber
{
public override IdentityError DuplicateUserName(string username)
{
return new IdentityError
{
Code = nameof(DuplicateUserName),
Description = "This is a error"
};
//other method in IdentityErrorDescriber,you can see below
}
}
然后您可以在startup
( .AddErrorDescriber<YourIdentityErrorDescriber>();
) 中注册它。
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ApplicationDbContext>().AddErrorDescriber<YourIdentityErrorDescriber>();
关于中的方法IdentityErrorDescriber
。
public class CustomIdentityErrorDescriber : IdentityErrorDescriber
{
public override IdentityError DefaultError() { return new IdentityError { Code = nameof(DefaultError), Description = $"An unknown failure has occurred." }; }
public override IdentityError ConcurrencyFailure() { return new IdentityError { Code = nameof(ConcurrencyFailure), Description = "Optimistic concurrency failure, object has been modified." }; }
public override IdentityError PasswordMismatch() { return new IdentityError { Code = nameof(PasswordMismatch), Description = "Incorrect password." }; }
public override IdentityError InvalidToken() { return new IdentityError { Code = nameof(InvalidToken), Description = "Invalid token." }; }
public override IdentityError LoginAlreadyAssociated() { return new IdentityError { Code = nameof(LoginAlreadyAssociated), Description = "A user with this login already exists." }; }
public override IdentityError InvalidUserName(string userName) { return new IdentityError { Code = nameof(InvalidUserName), Description = $"User name '{userName}' is invalid, can only contain letters or digits." }; }
public override IdentityError InvalidEmail(string email) { return new IdentityError { Code = nameof(InvalidEmail), Description = $"Email '{email}' is invalid." }; }
public override IdentityError DuplicateUserName(string userName) { return new IdentityError { Code = nameof(DuplicateUserName), Description = $"User Name '{userName}' is already taken." }; }
public override IdentityError DuplicateEmail(string email) { return new IdentityError { Code = nameof(DuplicateEmail), Description = $"Email '{email}' is already taken." }; }
public override IdentityError InvalidRoleName(string role) { return new IdentityError { Code = nameof(InvalidRoleName), Description = $"Role name '{role}' is invalid." }; }
public override IdentityError DuplicateRoleName(string role) { return new IdentityError { Code = nameof(DuplicateRoleName), Description = $"Role name '{role}' is already taken." }; }
public override IdentityError UserAlreadyHasPassword() { return new IdentityError { Code = nameof(UserAlreadyHasPassword), Description = "User already has a password set." }; }
public override IdentityError UserLockoutNotEnabled() { return new IdentityError { Code = nameof(UserLockoutNotEnabled), Description = "Lockout is not enabled for this user." }; }
public override IdentityError UserAlreadyInRole(string role) { return new IdentityError { Code = nameof(UserAlreadyInRole), Description = $"User already in role '{role}'." }; }
public override IdentityError UserNotInRole(string role) { return new IdentityError { Code = nameof(UserNotInRole), Description = $"User is not in role '{role}'." }; }
public override IdentityError PasswordTooShort(int length) { return new IdentityError { Code = nameof(PasswordTooShort), Description = $"Passwords must be at least {length} characters." }; }
public override IdentityError PasswordRequiresNonAlphanumeric() { return new IdentityError { Code = nameof(PasswordRequiresNonAlphanumeric), Description = "Passwords must have at least one non alphanumeric character." }; }
public override IdentityError PasswordRequiresDigit() { return new IdentityError { Code = nameof(PasswordRequiresDigit), Description = "Passwords must have at least one digit ('0'-'9')." }; }
public override IdentityError PasswordRequiresLower() { return new IdentityError { Code = nameof(PasswordRequiresLower), Description = "Passwords must have at least one lowercase ('a'-'z')." }; }
public override IdentityError PasswordRequiresUpper() { return new IdentityError { Code = nameof(PasswordRequiresUpper), Description = "Passwords must have at least one uppercase ('A'-'Z')." }; }
}
测试结果:
参考这个答案。
推荐阅读
- java - 如何以编程方式在执行程序节点中查找 Spark 版本?
- sql - 如何使用 PL/SQL 选择插入多行
- c# - 从c#中的嵌套无限foreach循环获取结果
- javascript - 如何在生成的构建中调试 javascript 错误
- electron - 在 archlinux LXDE 启动时自动启动电子应用程序
- npm - @angular/cli npm 安装错误
- php - 使用 PHP 获取几个 XML 属性
- javascript - 如何检测屏幕 JavaScript 中没有触摸?
- c# - EditorUtility.OpenFilePanel 执行两次
- arrays - 类型检查变量和数组