2013-11-01 16 views
13

Varsayılan minimum parola uzunluğunu 4 karakter olarak değiştirmeye çalışıyor. Biliyorum 4! Gülünç, doğru! Benim aramam değil.MVC'de parola uzunluğunu değiştirme 5 Üyeliği

Her neyse, onu RegisterViewModel üzerinde değiştirdim, ancak bu aslında değiştirmiyor. Aşağıdaki kodu yayınladım. Güncelleştirilmiş ViewModel'e göre ModleState.IsValid doğru şekilde döndürülür. Ancak o zaman bu, çok benzer yazı (Change Password...) bölümündeki adımları izlediyseniz

"en az 6 karakter olmalı Şifreler" bir hata mesajı ile False döndürür UserManager.CreateAsync() çağırır ama MVC 5 için çalışmıyor anlatabildiğim kadarıyla. Yine de aynı mesajı veriyor.

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

cevap

14

Eğer UserManager anda kodlanmış parametre this.PasswordValidator = (IIdentityValidator<string>) new MinimumLengthValidator(6); ile UserManager 'ın yapıcı başlatıldıktan şifre doğrulaması için kamu malına IIdentityValidator<string> PasswordValidator sahiptir görebileceğiniz gibi.

Bu özelliği MinimumLengthValidator nesnesi ile istenilen şifre uzunluğuna ayarlayabilirsiniz.

4

MSDN

Implementing custom password policy using ASP.NET Identity

burada öneri uygulamasında UserManager sınıfını genişletmek ve işinin müteahhidi içinde PasswordValidator özelliğini ayarlayarak etmektir

aşağıdaki makaleye Giriş: sonra

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

Ve denetleyiciniz (veya denetleyicilerin temel sınıfı), MyUserManager:

012'yi başlatır

Ayrıca, IIdentityValidator uygulayarak ve varsayılan doğrulayıcıyı değiştirerek daha karmaşık parola kurallarını denetlemek için özel bir doğrulayıcı da uygulayabilirsiniz.

9

App_Start Dizini'ndeki IdentityConfig.cs dosyasında bulunan PasswordValidator'u kullanarak parola özelliklerini ayarlayabilirsiniz.

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