2010-11-23 2 views
4

Я хотел бы проверить поле пароля для создания/обновления пользователей в asp.net (.net 3.5). Пароль будет использоваться для MembershipProvider.Валидатор паролей для MembershipProvider?

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

[изменить] пояснил, что это поле пароля для новых пользователей или для смены паролей, поэтому ValidateUser не помогает.

ответ

2

Я бы сказал, что ответа нет, основываясь на том факте, что SqlMembershipProvider не называют пароль метод валидации в его методах ChangePassword и CreateUser. Используя Reflector, вы можете видеть, что он проходит один и тот же набор проверок в обоих методах (см. Ниже). Поэтому я бы сказал, что написать свою собственную функцию, как вы делаете, это путь.

if (newPassword.Length < this.MinRequiredPasswordLength) 
{ 
    throw new ArgumentException(SR.GetString("Password_too_short", new object[] { "newPassword", this.MinRequiredPasswordLength.ToString(CultureInfo.InvariantCulture) })); 
} 
int num3 = 0; 
for (int i = 0; i < newPassword.Length; i++) 
{ 
    if (!char.IsLetterOrDigit(newPassword, i)) 
    { 
     num3++; 
    } 
} 
if (num3 < this.MinRequiredNonAlphanumericCharacters) 
{ 
    throw new ArgumentException(SR.GetString("Password_need_more_non_alpha_numeric_chars", new object[] { "newPassword", this.MinRequiredNonAlphanumericCharacters.ToString(CultureInfo.InvariantCulture) })); 
} 
if ((this.PasswordStrengthRegularExpression.Length > 0) && !Regex.IsMatch(newPassword, this.PasswordStrengthRegularExpression)) 
{ 
    throw new ArgumentException(SR.GetString("Password_does_not_match_regular_expression", new object[] { "newPassword" })); 
} 
0

Ролл свой собственный провайдер, унаследованный от встроенного в одном:

public class SqlMembershipProvider : System.Web.Security.SqlMembershipProvider 
{ 
    // called on login attempt 
    public override bool ValidateUser(string userName, string password) 
    { 
     // do your logic 

     // use built-in properties, parsed by base class for you, such as: 
     if (password.Length < this.MinRequiredPasswordLength) 
     { 
     } 

     //if ok, then: 
     base.ValidateUser(userName, password); 
    } 

    // called on new user creation attempt 
    public override MembershipUser CreateUser(string userName, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) 
    { 
     // do your logic 

     //if ok, then: 
     base.CreateUser(...); 
    } 
+0

Мое настоящее решение действительно просто написать мою собственную функцию, которая проверяет пароль на свойства `MembershipProvider`. Однако надеялся, что есть встроенный способ. Я обновил свой вопрос, чтобы уточнить, что это для новых пользователей/обновления пользователей, поэтому `ValidateUser()` не помогает. – tenfour 2010-11-23 11:52:33

+0

@tenfour: По пути вы можете проверить как новых, так и старых пользователей. См. Мой обновленный пост – abatishchev 2010-11-23 11:59:44

0

Что именно вы имеете в виду по Validate?

Существует способ требовать, чтобы пароль был определенной длины и делал его сложным (то есть 6 буквенно-цифровых, 6 nonalphanumerical), но у меня нет доступа к моим заметкам по этому вопросу.

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

Я сделал быстрый поиск в Google, нашел то, о чем думал, хотя мои заметки более углублены.

<membership defaultProvider="SqlProvider" 
    userIsOnlineTimeWindow = "20> 
    <providers> 
    <add 
     name="SqlProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="SqlServices" 
     requiresQuestionAndAnswer="true" 
     minRequiredPasswordLength="7" 
     minRequiredNonalphanumericCharacters="1" 
     /> 
    </providers> 
</membership> 

Я должен быть ясным, если вы хотите сделать что-либо за пределами «Проверяет, что указанное имя пользователя и пароль существуют в источнике данных.» вам нужен ваш собственный провайдер.

честно, я не понимаю причину вы не хотите использовать свой собственный провайдер ....

+0

Я имею в виду проверку ввода. Поставщик уже настроен. – tenfour 2010-11-23 12:42:25

Смежные вопросы