如何更改剃须刀页面中注册页面的身份错误
Posted
技术标签:
【中文标题】如何更改剃须刀页面中注册页面的身份错误【英文标题】:How to change Identity error for register page in razor pages 【发布时间】:2021-06-28 15:52:24 【问题描述】:我有一个基本问题。我想自定义IdentityResult
添加到ModelState
的错误。
这是我的代码(else
中的foreach
添加错误):
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);
【问题讨论】:
【参考方案1】:您可以覆盖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')." ;
测试结果:
请参阅此answer。
【讨论】:
以上是关于如何更改剃须刀页面中注册页面的身份错误的主要内容,如果未能解决你的问题,请参考以下文章