2013-11-01 6 views
13

デフォルトの最小パスワードの長さを4文字に変更しようとしています。私は知っている、4!ばかばかしい、右!私の電話ではありません。MVC 5のパスワードの長さを変更するメンバーシップ

とにかく、私はRegisterViewModelで変更しましたが、実際には変更されません。説明するために、以下のコードを掲載しました。 ModleState.IsValidは、更新されたViewModelに基づいて正しく戻ります。しかし、その後、私はこの、非常に、同様のポスト(Change Password...)の手順に従ってきた

「少なくとも6つの文字でなければならないパスワード」のエラーメッセージが表示されてFalseを返しUserManager.CreateAsync()呼び出しますが、それはMVC 5には機能しません。私が言うことができる限り、私はそうしています。それでも同じメッセージが返されます。

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

答えて

14

あなたはUserManagerは現在、ハードコードされたパラメータthis.PasswordValidator = (IIdentityValidator<string>) new MinimumLengthValidator(6);UserManagerのコンストラクタで初期化されたパスワード検証のためのパブリックプロパティIIdentityValidator<string> PasswordValidatorを持って見ることができるように。

このプロパティは、必要なパスワードの長さを持つMinimumLengthValidatorオブジェクトで設定できます。

4

ここでの提案は、アプリケーションでUserManagerクラスを拡張することで、コンストラクタでPasswordValidatorプロパティを設定するMSDN

Implementing custom password policy using ASP.NET Identity

で次の記事をチェックしてください:

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

そして中あなたのコントローラ(またはコントローラの基底クラス)は、MyUserManagerをインスタンス化します:

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

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

public MyUserManager UserManager { get; private set; } 

IIdentityValidatorを実装し、デフォルトのバリデータを置き換えることによって、より複雑なパスワードルールをチェックするカスタムバリデータを実装することもできます。

9

App_StartディレクトリのIdentityConfig.csファイルにあるPasswordValidatorを使用して、パスワードプロパティを設定できます。

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