Bab*_*bar 4 c# identity asp.net-core
我已将注册操作方法更改为接受用户名而不是电子邮件。
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = model.Name,
Email = model.Email,
};
Run Code Online (Sandbox Code Playgroud)
但是,当我像Joe Smith这样在TextBox中输入名称时,它给我一个错误,提示用户名无效。它不允许用户名接受空白。我的问题是如何修改内置用户名以允许空格和特殊字符。我正在使用ASP.NET Core。
提前致谢。
所以 cloudikka 的回答是对的。我将明确添加(cloudikka 的链接也对此进行了解释)您需要列出您想要允许的所有字符(不仅仅是空格或特殊字符),如下所示:
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/ ";
});
Run Code Online (Sandbox Code Playgroud)
而不是这options.User.AllowedUserNameCharacters = " ";意味着“只允许空白字符”。(我认为这是巴巴尔的问题。)
小智 6
如果您有一份详尽的特殊字符列表要列入白名单,那么建议的解决方案可能会很棘手。
如果您想改为黑名单,请在startup.cs中禁用白名单:
services.AddIdentity<User, Role>(
options =>
{
options.User.AllowedUserNameCharacters = string.Empty;
})
Run Code Online (Sandbox Code Playgroud)
然后创建您的自定义用户验证器
public class UsernameValidator<TUser> : IUserValidator<TUser>
where TUser : User
{
public Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user)
{
if (user.UserName.Any(x=>x ==':' || x == ';' || x == ' ' || x == ','))
{
return Task.FromResult(IdentityResult.Failed(new IdentityError
{
Code = "InvalidCharactersUsername",
Description = "Username can not contain ':', ';', ' ' or ','"
}));
}
return Task.FromResult(IdentityResult.Success);
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其添加到startup.cs:
services.AddIdentity<User, Role>(
options =>
{
options.Password = new PasswordOptions
{
RequiredLength = 8,
RequireUppercase = true,
RequireNonAlphanumeric = true,
RequireDigit = true,
RequireLowercase = true
};
options.User.AllowedUserNameCharacters = string.Empty;
}).AddUserValidator<UsernameValidator<User>>()
Run Code Online (Sandbox Code Playgroud)
您可以使用Startup.cs中的选项设置用户身份验证规则,以配置身份。
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.User.AllowedUserNameCharacters = "allowed characters here";
options.User.RequireUniqueEmail = true/false;
});
Run Code Online (Sandbox Code Playgroud)
相关资源:
services.AddIdentity<ApplicationUser, IdentityRole>(options => { options.User.AllowedUserNameCharacters = String.Empty; options.User.RequireUniqueEmail = true; })
.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4875 次 |
| 最近记录: |