从零开始学ASP.NET Core Identity框架( 四 )


services.Configure<IdentityOptions>(options =>{options.Password.RequiredLength = 6;options.Password.RequiredUniqueChars = 3;options.Password.RequireNonAlphanumeric = false;options.Password.RequireLowercase = false;options.Password.RequireUppercase = false;});也可以在添加身份服务时执行此操作,代码如下 。
services.AddIdentity<IdentityUser,IdentityRole>(options =>{options.Password.RequiredLength = 6;options.Password.RequiredUniqueChars = 3;options.Password.RequireNonAlphanumeric = false;}).AddEntityFrameworkStores<AppDbContext>();当然,在这里推荐使用IdentityOptions的形式进行配置,因为它可以作为一个独立服务,而不是嵌套在AddIdentity()方法中 。
IdentityOptions对象中除了Password的配置信息,还有用户、登录、策略等配置信息,我们可以根据不同的场景进行灵活的配置 。

  • UserOptions 。
  • SignInOptions 。
  • LockoutOptions 。
  • TokenOptions 。
  • StoreOptions 。
  • ClaimsIdentityOptions 。
21.3.4 修改中文提示的错误信息Identity提供了AddErrorDescriber()方法,可方便我们进行错误内容的配置和处理 。
ASP.NET Core默认提供的都是英文提示,我们可以将它们修改为中文 。现在我们创建一个CustomIdentityErrorDescriber的类文件,路径为根目录下创建的CustomerMiddlewares文件夹,然后继承IdentityErrorDescriber服务,添加以下代码 。
public class CustomIdentityErrorDescriber:IdentityErrorDescriber{public override IdentityError DefaultError(){return new IdentityError{Code = nameof(DefaultError),Description = $"发生了未知的故障 。" };}public override IdentityError ConcurrencyFailure(){return new IdentityError{Code = nameof(ConcurrencyFailure),Description = "乐观并发失败,对象已被修改 。" };}public override IdentityError PasswordMismatch(){return new IdentityError{Code = nameof(PasswordMismatch),Description = "密码错误" };}public override IdentityError InvalidToken(){return new IdentityError{Code = nameof(InvalidToken),Description = "无效的令牌." };}public override IdentityError LoginAlreadyAssociated(){return new IdentityError{Code = nameof(LoginAlreadyAssociated),Description = "具有此登录的用户已经存在." };}public override IdentityError InvalidUserName(string userName){return new IdentityError{Code = nameof(InvalidUserName),Description = $"用户名'{userName}'无效,只能包含字母或数字." };}public override IdentityError InvalidEmail(string email){return new IdentityError{Code = nameof(InvalidEmail),Description = $"邮箱'{email}'无效." };}public override IdentityError DuplicateUserName(string userName){return new IdentityError{Code = nameof(DuplicateUserName),Description = $"用户名'{userName}'已被使用." };}public override IdentityError DuplicateEmail(string email){return new IdentityError{Code = nameof(DuplicateEmail),Description = $"邮箱'{email}'已被使用." };}public override IdentityError InvalidRoleName(string role){return new IdentityError{Code = nameof(InvalidRoleName),Description = $"角色名'{role}'无效." };}public override IdentityError DuplicateRoleName(string role){return new IdentityError{Code = nameof(DuplicateRoleName),Description = $"角色名'{role}'已被使用." };}public override IdentityError UserAlreadyHasPassword(){return new IdentityError{Code = nameof(UserAlreadyHasPassword),Description = "该用户已设置了密码." };}public override IdentityError UserLockoutNotEnabled(){return new IdentityError{Code = nameof(UserLockoutNotEnabled),Description = "此用户未启用锁定." };}public override IdentityError UserAlreadyInRole(string role){return new IdentityError{Code = nameof(UserAlreadyInRole),Description = $"用户已关联角色'{role}'." };}public override IdentityError UserNotInRole(string role){return new IdentityError{Code = nameof(UserNotInRole),Description = $"用户未关联角色'{role}'." };}public override IdentityError PasswordTooShort(int length){return new IdentityError{Code = nameof(PasswordTooShort),Description = $"密码必须至少是{length}字符." };}public override IdentityError PasswordRequiresNonAlphanumeric(){return new IdentityError{Code = nameof(PasswordRequiresNonAlphanumeric),Description = "密码必须至少有一个非字母数字字符."};}public override IdentityError PasswordRequiresDigit(){return new IdentityError{Code = nameof(PasswordRequiresDigit),Description = $"密码必须至少有一个数字('0'-'9')." };}public override IdentityError PasswordRequiresUniqueChars(int uniqueChars){return new IdentityError{Code = nameof(PasswordRequiresUniqueChars),Description = $"密码必须使用至少不同的{uniqueChars}字符 。" };}public override IdentityError PasswordRequiresLower(){return new IdentityError{Code = nameof(PasswordRequiresLower),Description = "密码必须至少有一个小写字母('a'-'z')." };}public override IdentityError PasswordRequiresUpper(){return new IdentityError{Code = nameof(PasswordRequiresUpper),Description = "密码必须至少有一个大写字母('A'-'Z')." };}}


推荐阅读