Bea*_*dog 4 c# asp.net-mvc-3 asp.net-core
我有一个 ASP.net Core 3.1 Web 应用程序。我正在尝试在创建新用户时自定义“用户名无效”的错误消息。我创建了一个继承 Microsoft.AspNetCore.Identity.IdentityErrorDescriber 的自定义类“CustomIdentityErrorDescriber”
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, allowable characters 'a-z 'A-Z'." }; }
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 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')." }; }
}
Run Code Online (Sandbox Code Playgroud)
我已经在startup.cs文件中实现了我的自定义类,如下所示
services.AddTransient<IdentityErrorDescriber, CustomIdentityErrorDescriber>();
services.Configure<IdentityOptions>(opts =>
{
// opts.User.RequireUniqueEmail = true;
opts.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._";
opts.Password.RequiredLength = 8;
opts.Password.RequireNonAlphanumeric = false;
opts.Password.RequireLowercase = false;
opts.Password.RequireUppercase = false;
opts.Password.RequireDigit = false;
});
Run Code Online (Sandbox Code Playgroud)
代码检测到错误,并且我确实从框架收到错误消息。然而,错误消息包含有关角色的措辞,这对我来说毫无意义。因此,在弹出对话框中向用户显示的错误消息是
“用户已在角色中 用户名 'xxx xxx' 无效,允许使用字符 'az 'AZ'。”
我无法理解错误消息正确的最后部分前面的“用户已处于角色”的位置和/或原因。
由于您创建了 的扩展,因此IdentityErroDescriber您还必须通知 Identity 指向新扩展类的正确方向。
这是通过在startup.csConfigureServices的methon中提供身份注册扩展类来实现的:
services.AddIdentity<AppUser, AppRole>()
.AddErrorDescriber<CustomIdentityErrorDescriber>(); //<== Here
Run Code Online (Sandbox Code Playgroud)
这样,所有错误都将按照扩展方法中的描述显示。
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |