AddToRole失败,用户名中带有+号



我正在使用它将一个新创建的用户添加到角色:

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);

在我的解决方案中,用户名=电子邮件。

我发现,当用户名/电子邮件包含一个符号(+、-或类似的符号)时,它不会将用户添加到角色中。我得到的错误是"User name x is invalid, can only contain letters or digits."。成功添加了用户,只是AddToRole失败了。

但我不明白为什么。

在IdentityConfig.cs 中,AllowOnlyAlphanumericUserNames设置为false

有什么想法吗?

我能想到两种可能的解决方案。

1.)按照您在评论中链接的解决方案,将您的代码示例编辑为:

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);

我认为问题是,您正在创建UserManager的新实例,而如果IdentityConfig,则不使用该实例。尝试设置代码的var userManager = new UserManager<ApplicationUser>(userStore);行之后的userManager.AllowOnlyAlphanumericUserNames = false;

通过添加下面的代码将AllowOnlyAlphanumericUserNames设为false,这就成功了。

  userManager.UserValidator = new UserValidator<User>(userManager)
        {
            AllowOnlyAlphanumericUserNames = false
        };

相关内容

  • 没有找到相关文章

最新更新