AddToRole 失败并在用户名中输入 + 号?
AddToRole fails with a + sign in the username?
我正在使用它来将新创建的用户添加到角色:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(user.Id, model.UserRole);
在我的解决方案中,用户名 = 电子邮件。
我发现,当 username/email 包含符号(+、- 或类似符号)时,它不会将用户添加到角色。我得到的错误是“User name x is invalid, can only contain letters or digits.
”。
用户添加成功,只是AddToRole失败了。
但是我想不通为什么。
AllowOnlyAlphanumericUserNames
设置为假,在IdentityConfig.cs
有什么想法吗?
我认为问题在于,您正在创建 UserManager 的新实例,而不是使用 IdentityConfig 的实例。尝试设置
userManager.AllowOnlyAlphanumericUserNames = false;
在您的代码 var userManager = new UserManager<ApplicationUser>(userStore);
行之后
我能想到两种可能的解决方案。
1.) 按照 the solution you linked in the comments 将您的代码示例编辑为:
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
userManager.AddToRole(user.Id, model.UserRole);
2.) 在您的 userManager
中重新创建 UserValidator
并再次尝试 AddToRole
:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true };
userManager.AddToRole(user.Id, model.UserRole);
通过添加下面的代码将 AllowOnlyAlphanumericUserNames 设置为 false,这样就可以了。
userManager.UserValidator = new UserValidator<User>(userManager)
{
AllowOnlyAlphanumericUserNames = false
};
我正在使用它来将新创建的用户添加到角色:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(user.Id, model.UserRole);
在我的解决方案中,用户名 = 电子邮件。
我发现,当 username/email 包含符号(+、- 或类似符号)时,它不会将用户添加到角色。我得到的错误是“User name x is invalid, can only contain letters or digits.
”。
用户添加成功,只是AddToRole失败了。
但是我想不通为什么。
AllowOnlyAlphanumericUserNames
设置为假,在IdentityConfig.cs
有什么想法吗?
我认为问题在于,您正在创建 UserManager 的新实例,而不是使用 IdentityConfig 的实例。尝试设置
userManager.AllowOnlyAlphanumericUserNames = false;
在您的代码 var userManager = new UserManager<ApplicationUser>(userStore);
行之后
我能想到两种可能的解决方案。
1.) 按照 the solution you linked in the comments 将您的代码示例编辑为:
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
userManager.AddToRole(user.Id, model.UserRole);
2.) 在您的 userManager
中重新创建 UserValidator
并再次尝试 AddToRole
:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true };
userManager.AddToRole(user.Id, model.UserRole);
通过添加下面的代码将 AllowOnlyAlphanumericUserNames 设置为 false,这样就可以了。
userManager.UserValidator = new UserValidator<User>(userManager)
{
AllowOnlyAlphanumericUserNames = false
};