2013-11-01 10 views
13

Der Versuch, die Standardlänge des Mindestkennworts auf 4 Zeichen zu ändern. Ich weiß, 4 !!! Lächerlich, richtig! Nicht mein Anruf.Ändern der Kennwortlänge in MVC 5 Mitgliedschaft

Wie auch immer, ich habe es auf der RegisterViewModel geändert, aber das ändert es eigentlich nicht. Zur Veranschaulichung habe ich den folgenden Code veröffentlicht. Die ModleState.IsValid gibt korrekt basierend auf dem aktualisierten ViewModel zurück. es ruft jedoch dann UserManager.CreateAsync() die False mit einer Fehlermeldung von kehrt

ich die Schritte in diesem, sehr ähnlich Post gefolgt sind „Passwörter müssen mindestens 6 Zeichen lang sein“ (Change Password...), aber es funktioniert nicht für MVC 5 so weit ich es sagen kann. Es gibt immer noch die gleiche Nachricht zurück.

// 
    // POST: /Account/Register 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = new ApplicationUser() { UserName = model.UserName, LastLogin = model.LastLogin }; 


// This is where it 'fails' on the CreateAsync() call 
        var result = await UserManager.CreateAsync(user, model.Password); 
        if (result.Succeeded) 
        { 
         await SignInAsync(user, isPersistent: false); 
         return RedirectToAction("Index", "Home"); 
        } 
        else 
        { 
         AddErrors(result); 
        } 
       } 
      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 

Antwort

14

Wie Sie UserManager haben öffentliches Eigentum IIdentityValidator<string> PasswordValidator für die Kennwortüberprüfung sehen, die zur Zeit in UserManager ‚s Konstruktor mit fest codierten Parametern this.PasswordValidator = (IIdentityValidator<string>) new MinimumLengthValidator(6); initialisiert wird.

Sie können diese Eigenschaft mit MinimumLengthValidator Objekt mit der erforderlichen Kennwortlänge festlegen.

4

Überprüfen Sie den folgenden Artikel auf MSDN

Implementing custom password policy using ASP.NET Identity

Die hier Vorschlag, die UserManager Klasse in der Anwendung zu erweitern und die Einstellung der PasswordValidator Eigenschaft im contructor:

public class MyUserManager : UserManager<ApplicationUser> 
{ 
    public MyUserManager() : 
     base(new UserStore<ApplicationUser>(new ApplicationDbContext())) 
    { 
     PasswordValidator = new MinimumLengthValidator(4); 
    } 
} 

Und dann in Ihr Controller (oder Controller-Basisklasse) instanziieren MyUserManager:

public BaseController() : this(new MyUserManager()) 
{ 
} 

public BaseController(MyUserManager userManager) 
{ 
    UserManager = userManager; 
} 

public MyUserManager UserManager { get; private set; } 

Sie können auch einen benutzerdefinierten Validator implementieren, um komplexere Kennwortregeln zu überprüfen, indem Sie IIdentityValidator implementieren und den Standardvalidator ersetzen.

9

Sie können die Kennworteigenschaften mit dem PasswordValidator in der Datei IdentityConfig.cs im App_Start-Verzeichnis festlegen.

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 = true 
     }; 

     // Configure validation logic for passwords 
     manager.PasswordValidator = new PasswordValidator 
     { 
      RequiredLength = 6, 
      RequireNonLetterOrDigit = false, 
      RequireDigit = true, 
      RequireLowercase = true, 
      RequireUppercase = true, 
     }; 

     // Configure user lockout defaults 
     manager.UserLockoutEnabledByDefault = true; 
     manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); 
     manager.MaxFailedAccessAttemptsBeforeLockout = 5; 

     // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user 
     // You can write your own provider and plug it in here. 
     manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser> 
     { 
      MessageFormat = "Your security code is {0}" 
     }); 
     manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser> 
     { 
      Subject = "Security Code", 
      BodyFormat = "Your security code is {0}" 
     }); 
     manager.EmailService = new EmailService(); 
     manager.SmsService = new SmsService(); 
     var dataProtectionProvider = options.DataProtectionProvider; 
     if (dataProtectionProvider != null) 
     { 
      manager.UserTokenProvider = 
       new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity")); 
     } 
     return manager; 
    }