Как использовать MembershipValidatePasswordEventHandler? - PullRequest
2 голосов
/ 09 января 2012

Можно ли как-то ограничить выбор пароля при создании нового пользователя с помощью asp. Чистое членство. ??
Состояние, как
Надежность пароля:

  • Минимум 8 символов, с усилением сложности символов. т.е.: не содержать имя учетной записи пользователя
  • Длина не менее восьми символов
  • Содержит символы из трех следующих четырех категорий:

английские заглавные буквы (от A до Z)
Английские строчные буквы (от a до z)
Базовые 10 цифр (от 0 до 9)
Не алфавитные символы (например,!, $, #,%)

1 Ответ

3 голосов
/ 09 января 2012

В этом случае вам необходимо внести некоторые изменения в ваш файл Web.config.Найдите следующий раздел и измените его соответствующим образом

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
  </providers>
</membership>

ОБНОВЛЕНО

Сначала обновите раздел конфигурации членства в файле web.config, как показано ниже

  <membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" passwordAttemptWindow="10"
         applicationName="/" />
  </providers>
</membership>

Затем в контроллере учетной записи замените действие регистрации (действие, отмеченное [HttpPost]) следующим кодом

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    Membership.ValidatingPassword += new MembershipValidatePasswordEventHandler(OnValidatePassword);
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus;
        Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

        if (createStatus == MembershipCreateStatus.Success)
        {
            FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", ErrorCodeToString(createStatus));
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
 }

и, наконец, добавьте код OnValidatePassword под действием регистрации

public void OnValidatePassword(object sender,
                          ValidatePasswordEventArgs args)
{
    System.Text.RegularExpressions.Regex r =
          new System.Text.RegularExpressions.Regex(@"(?=.{8,})(?=(.*\d){1,})(?=(.*\W){1,})");

    if (!r.IsMatch(args.Password))
    {
        args.FailureInformation =
              new HttpException("Password must be at least 8 characters long and " +
                                "contain at least one number and one special character.");
        args.Cancel = true;
    }
}

Надеюсь, это поможет вам достичь того, чего вы хотите !!

...