14

デフォルトの最小パスワード長を 4 文字に変更しようとしています。わかってるよ 4!!! ばかげている、そうです!私の電話ではありません。

とにかく、私はそれを変更しましたRegisterViewModelが、実際には変更されません。説明するために、以下のコードを投稿しました。ModleState.IsValid更新された ViewModel に基づいて正しく返されます。ただし、「パスワードは少なくとも6文字である必要があります」というエラーメッセージでUserManager.CreateAsync()返される呼び出しFalse

この非常によく似た投稿 (パスワードの変更... ) の手順に従いましたが、私が知る限り、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);
        }
4

3 に答える 3

4

MSDN の次の記事を確認してください。

ASP.NET ID を使用してカスタム パスワード ポリシーを実装する

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

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また、カスタム バリデータを実装して、デフォルトのバリデータを実装および置換することで、より複雑なパスワード ルールをチェックすることもできます。

于 2014-01-15T09:19:48.597 に答える