【问题标题】:Asp.net Identity 2.0 - Unique EmailAsp.net Identity 2.0 - 独特的电子邮件
【发布时间】:2014-12-16 23:03:10
【问题描述】:

我的应用程序是 MVC5,我尝试使用以下方法允许重复的电子邮件地址:

public async Task<ActionResult> AddUser (UserRegisterViewModel userViewModel)
        {
       ......
            if (ModelState.IsValid)
                {
                var user = new ApplicationUser
                {
               ......
                };
                var adminresult = await UserManager.CreateAsync(user);
                var result = await UserManager.AddToRolesAsync(user.Id, user.Profession);
                UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
                {
                    RequireUniqueEmail = false
                };
                if (adminresult.Succeeded)
                    {
                     ....
                    return RedirectToAction("VisitInfo", "Visit");
                    }
                if (!adminresult.Succeeded)
                    {
                    var er = adminresult.Errors.FirstOrDefault();
                    ViewBag.Error = er;
                    return View(userViewModel);
                    }

                    return RedirectToAction("VisitInfo", "Visit");
                }               
            return View();
            }

通过添加 RequireUniqueEmail = false。它不起作用,页面被重定向到登录页面! 我的问题是,我是否可以仅针对此操作允许重复电子邮件,以及为什么我会被重定向到登录页面?

【问题讨论】:

  • 该代码是否都在AddUser 方法中?如果是这样,您将在创建用户之后设置UserValidator。它需要进入IdentityConfig.cs
  • 谢谢布伦丹。我可以这样做,但是我需要为其他注册表单设置此规则。
  • 如果将其放在IdentityConfig.cs 中,那么它将适用于整个站点。就目前而言,您在创建用户之后设置 RequireUniqueEmail 标志。

标签: asp.net-mvc validation asp.net-identity


【解决方案1】:

如果您使用默认的 MVC 5 项目模板,正确的方法是在 IdentityConfig.cs 中设置规则,而不是在注册控制器中。

打开App_Start\IdentityConfig.cs 并编辑这一行:

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
{
    var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
    // Configure validation logic for usernames
    manager.UserValidator = new UserValidator<ApplicationUser>(manager)
    {
        AllowOnlyAlphanumericUserNames = false,
        RequireUniqueEmail = false  //<-- the default is true
    };

    ....<snip>....

【讨论】:

  • 在 Identity Core 中,默认值似乎是 false
【解决方案2】:

您必须在 configureservices 中添加以下行

 services.AddIdentity<ApplicationUser, IdentityRole>(options =>
            {
                options.User.RequireUniqueEmail = false;

            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

【讨论】:

  • 仍然在运行迁移时创建 UserNameIndex,其唯一属性设置为 true
【解决方案3】:

感谢布伦丹,我搬家了

            UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
                {
                    RequireUniqueEmail = false
                };

之前:

 var adminresult = await UserManager.CreateAsync(user);

【讨论】:

  • 即使设置了RequireUniquePhone = true,我也可以让两个用户使用同一部手机。
猜你喜欢
  • 2015-09-28
  • 2017-02-15
  • 1970-01-01
  • 2014-05-28
  • 2015-01-06
  • 2010-11-28
  • 2014-06-30
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多