Подтвердить что ты не робот

Как вы можете проверить, будет ли пароль членства ASP.NET соответствовать установленным требованиям сложности?

У меня есть страница ASP.NET, которая позволяет администратору изменять пароль для пользователя. Поскольку администратор не знает пароль пользователя, я использую следующее:

MembershipUser member = Membership.GetUser(_usernameTextBox.Text);
member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text);

- как описано в этом вопросе qaru.site/info/94960/....

Если новый пароль не соответствует требованиям сложности, которые настроены в файле web.config, пароль будет reset, но не будет изменен на желаемый. Если новый пароль не соответствует требованиям сложности, пароль не должен вообще меняться.

Есть ли простой способ проверить новый пароль на требования к сложности?

4b9b3361

Ответ 1

Для проверки пароля вы можете использовать следующие свойства:

Обратите внимание, что свойство PasswordStrengthRegularExpression будет пустой строкой, если вы не настроили его в файле web.config.

Информацию о сопоставлении регулярных выражений см. в ссылке MSDN на Regex.IsMatch(String)

* Спасибо Мэтту за полезные комментарии.

Ответ 2

/// <summary>
/// Checks password complexity requirements for the actual membership provider
/// </summary>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(string password)
{
    return CheckPasswordComplexity(Membership.Provider, password);
}


/// <summary>
/// Checks password complexity requirements for the given membership provider
/// </summary>
/// <param name="membershipProvider">membership provider</param>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(MembershipProvider membershipProvider, string password)
{
    if (string.IsNullOrEmpty(password)) return false;
    if (password.Length < membershipProvider.MinRequiredPasswordLength) return false;
    int nonAlnumCount = 0;
    for (int i = 0; i < password.Length; i++)
    {
        if (!char.IsLetterOrDigit(password, i)) nonAlnumCount++;
    }
    if (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters) return false;
    if (!string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) &&
        !Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))
    {
        return false;
    }
    return true;
}

Ответ 3

У меня нет доступа к вики.

Одна строка должна быть скорректирована, чтобы исправить небольшую ошибку.

изменить  if (nonAlnumCount < Membership.MinRequiredNonAlphanumericCharacters) следующим образом if (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters)

Ответ 4

Основываясь на решении Bamba, я решил сделать метод расширения для поставщика членства (и уменьшил код:

    public static bool IsPasswordValid(this MembershipProvider membershipProvider, string password)
    {
        return (!string.IsNullOrEmpty(password) && // Password is not empty or null AND
            password.Length >= membershipProvider.MinRequiredPasswordLength && // Meets required length AND
            password.Count(c => !char.IsLetterOrDigit(c)) >= membershipProvider.MinRequiredNonAlphanumericCharacters && // Contains enough non-alphanumeric characters AND
            (string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) || // Either there is no RegEx requirement OR
                Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))); // It matches the RegEx
    }

Чтобы использовать его, вам нужно только позвонить Membership.Provider.IsPasswordValid(...), где это необходимо.

Ответ 5

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

Кроме того, вы можете использовать контроль прочности счетчика.

Ответ 6

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