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