2010-11-23 8 views
4

asp.net (.net 3.5)에서 사용자를 생성/업데이트하기위한 암호 필드의 유효성을 검사하고 싶습니다. 비밀번호는 MembershipProvider에 사용됩니다.MembershipProvider의 암호 유효성 검사기?

유효성 검사에서 멤버 자격 공급자의 구성 설정을 사용하도록 구현하는 가장 좋은 방법은 무엇입니까? 물론 코드 만 작성할 수는 있지만 근본적인 무언가처럼 보이기 때문에 코드를 작성해야합니다.

[편집] 이것은 새로운 사용자 또는 암호 변경에 대한 암호 필드임을 분명히 했으므로 ValidateUser은 도움이되지 않습니다. 자신의 업체

답변

2

나는 대답은 SqlMembershipProvider 암호를 호출하지 않는다는 사실을 기반으로, 아니오 말할 것 유효성 검사 방법은 ChangePasswordCreateUser 방법입니다. 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" })); 
} 
+1

리플렉터를 보는 좋은 생각 ... 감사합니다. – tenfour

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

+0

@tenfour : 내 방식으로 신구 사용자를 확인할 수 있습니다. 내 업데이트 된 게시물 참조 – abatishchev

0

정확히 검증이 무엇을 의미합니까?

비밀번호를 특정 길이로 설정하고 복잡하게 만드는 방법 (예 : 6 자리 영숫자, 6 자리 숫자가 아닌 숫자)은 있지만 주제에 대한 내 노트에 액세스 할 수 없습니다.

이는 모두 응용 프로그램 자체에 대한 구성 파일에서 수행됩니다. 나는 당신이 당신 자신의 함수를 사용할 필요가 있다는 것에 동의해야 할 것이다. 당신이 기본 행동을 확장하기를 원하기 때문에 이것을하지 않을 이유가 없다.

나는 내 노트가 더 심도 있지만, 내가 생각하고있는 것을 발견했다. 빠른 구글 검색을했다.

<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

+0

@tenfour 기본 공급자는 사용자가 생성되기 전에 해당 규칙과 일치하는 암호의 유효성을 검사합니다. 이러한 규칙을 확장하려는 경우이를 수행 할 수있는 유일한 방법은 자체 공급자를 사용하는 것입니다. –

+0

나는 내 질문에 대해 잘 설명하지 못한다고 생각한다./나는 새로운 사용자를 생성하거나 기존 사용자의 비밀번호를 변경하는 입력 검증에 대해서만 이야기하고있다. 이것은 사용자를 관리하는 관리 페이지 용입니다. 이미 SqlMembershipProvider를 사용하고 있는데 완벽하게 구성되어 있지만 새 사용자를 만들기 전에 사용자에게 유효성 검사 오류를 표시하려고합니다. 희망을 명확히하는 데 도움이됩니다. – tenfour