Членство в ASP .Net (Где управление создает нового пользователя из окна конфигурации?) - PullRequest
0 голосов
/ 10 января 2012

Вот мой файл Web.config

<membership>
        <providers>
            <clear />
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8"  minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])$" passwordAttemptWindow="10" applicationName="/" />
        </providers>
    </membership>


Здесь я хочу ограничить новый пароль пользователя несколькими условиями:


Надежность пароля:

  1. Содержит символы из трех следующих четырех категорий: Английские заглавные буквы (от A до Z)
    Английские строчные буквы (от a до z)
    Базовые 10 цифр (от 0 до 9)
    Не алфавитные символы (например,!, $, #,%)
    -
  2. пароль Не содержит имя учетной записи пользователя


Как вы можете видеть, есть атрибут passwordStrengthRegularExpression, который я использовал в разделе web.config для соответствия 1-му условию (которое предоставляет членство).
Нужно решение для достижения второго условия.


Короче говоря :: Мне нужно настроить членство в соответствии с условием (применяется сложность символов. Т.е.: пароль Не содержит имя учетной записи пользователя)

Обновлено ::
Я сделал то, что предложила мне Эранга в моем заявлении. Теперь я также хочу отобразить соответствующее сообщение при сбое членства createUser (при нескольких пользовательских условиях).

Ответы [ 2 ]

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

Вы можете создавать подклассы у вашего провайдера по умолчанию и обрабатывать событие ValidatingPassword . Там вы можете отменить проверку, если она не соответствует вашим вторым критериям.

public class MyMembershipProvider : SqlMembershipProvider 
{
    public MyMembershipProvider()
    {
        ValidatingPassword += ValidatePassword;
    }

    void ValidatePassword(object sender, ValidatePasswordEventArgs e)
    {
         if (e.Password.Contains(e.UserName))
         {
             e.Cancel = true;
             e.FailureInformation = new Exception("blah blah");
         }
    }
}

Ваш Web.Config файл должен содержать следующее. Убедитесь, что вы указали полное имя своего пользовательского класса членства для атрибута type.

   <membership>
        <providers>
            <clear />
            <add name="MyMembershipProvider" type="MyNamespace.MyMembershipProvider" connectionStringName="ApplicationServices" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8"  minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])$" passwordAttemptWindow="10" applicationName="/" />
        </providers>
    </membership>
1 голос
/ 10 января 2012

Это не MVC, но вы можете посмотреть этот пример переопределения статического события.Кроме того, поскольку это в основном тот же вопрос, который вы задавали до , с чуть большей детализацией, возможно, вы могли бы просто обновить исходный вопрос?

...