2014-12-16 11 views
6

Meine Anwendung MVC5 ist, habe ich versucht, doppelte E-Mail-Adresse mit dem folgenden zu ermöglichen:Asp.net Identity 2.0 - Einzigartige E-Mail

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

Durch das Hinzufügen RequireUniqueEmail = false. Es hat nicht funktioniert, die Seite wird zur Anmeldeseite umgeleitet !! Meine Frage ist, könnte ich doppelte E-Mails nur für diese Aktion zulassen, und warum werde ich auf die Anmeldeseite umgeleitet?

+0

Ist dieser Code alle innerhalb des 'AddUser' Methode? Wenn ja, richten Sie den 'UserValidator' NACH dem Erstellen des Benutzers ein. Es muss gehen in 'IdentityConfig.cs' –

+0

Danke Brendan. Ich könnte das tun, aber ich brauche diese Regel für andere Registrierungsformulare. – hncl

+0

Wenn es in die 'IdentityConfig.cs' geschrieben wird, wird es Site-weit angewendet. So wie es steht, setzen Sie das Flag "RequireUniqueEmail", nachdem Sie den Benutzer bereits erstellt haben. –

Antwort

4

Dank Brendan zog ich

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

Bevor:

var adminresult = await UserManager.CreateAsync(user); 
+0

Ich konnte zwei Benutzer mit demselben Telefon sogar mit 'RequireUniquePhone = true' setzen. –

20

Wenn Sie die Standard MVC 5 Projektvorlage verwenden, der richtige Weg, um die Regeln zu setzen in IdentityConfig.cs ist statt in der Registrierungscontroller.

öffnen App_Start\IdentityConfig.cs und bearbeiten Sie diese Zeile:

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>.... 
+0

Dies sollte die akzeptierte Antwort sein. – ProfK

Verwandte Themen