2014-12-16 2 views
6

La mia applicazione è MVC5, ho provato a permettere indirizzo di posta elettronica duplicato utilizzando il seguente:Asp.net Identity 2.0 - e-mail univoco

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

Aggiungendo RequireUniqueEmail = false. Non ha funzionato, la pagina viene reindirizzata alla pagina di accesso !! La mia domanda è possibile consentire e-mail duplicate solo per questa azione, e perché mi viene reindirizzato alla pagina di accesso?

+0

è che il codice tutto all'interno del metodo 'AddUser'? In tal caso, si imposta 'UserValidator' dopo aver creato l'utente. Deve andare in 'IdentityConfig.cs' –

+0

Grazie Brendan. Potrei farlo, tuttavia ho bisogno che questa regola sia in vigore per altri moduli di registrazione. – hncl

+0

Se è inserito in 'IdentityConfig.cs', verrà applicato su tutto il sito. Così com'è, stai impostando il flag 'RequireUniqueEmail' dopo che hai già creato l'utente. –

risposta

4

Grazie a Brendan, mi sono trasferito

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

Prima:

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

Sono stato in grado di avere due utenti con lo stesso telefono anche con il set 'RequireUniquePhone = true'. –

20

Se si utilizza il MVC 5 modello di progetto di default, il modo corretto di impostare le regole è in IdentityConfig.cs invece che in il controller di registrazione.

Aprire App_Start\IdentityConfig.cs e modificare questa linea:

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

Questa dovrebbe essere la risposta accettata. – ProfK

Problemi correlati