ASP.NET 2.0에 새로 추가된 멤버십 공급자 기능은 일련의 강력한 등록 및 로그인 제어와 결합되어 사용자 로그인 및 권한을 쉽게 관리할 수 있습니다(<< ASP.NET 2.0 로그인 제어 소개 >> 참조).
그러나 ASP.NET 2.0과 함께 제공되는 로그인 제어 및 멤버십 관리 기능은 기본적으로 SQL Server 2005 Express에서 사용됩니다. 그러면 SQL Server 2000 또는 액세스와 같은 다른 데이터 소스를 사용하도록 변경하는 방법은 무엇입니까? , 오라클 등? 애플리케이션에서 로그인한 사용자나 사용자 권한을 관리하기 위해 애플리케이션을 다시 작성하려면 어떻게 수정해야 합니까? 이 기사에서는 ASP.NET 2.0에서 사용자 지정 공급자를 사용하여 로그인 컨트롤과 협력하여 간단한 로그인 프로세스를 구현하는 방법을 보여줍니다.
ASP.NET 2.0의 공급자가 작동하는 방식을 이해하려면 먼저 다음 구조 다이어그램을 살펴보십시오.
필드 이름 데이터 유형 필드 크기 사용자 이름(키) 텍스트 8 비밀번호 텍스트 8 이메일 텍스트 50 비밀번호질문 텍스트 50 비밀번호답변 50 |
공개 클래스 ModifiedSqlMembershipProvider SqlMembershipProvider 상속 공개 재정의 함수 CreateUser(...) ... 기능 종료 ... End Class |
Visual Studio 2005 베타 2에서 제공되는 SqlMembershipProvider를 사용하지 않으려면 자체 클래스를 선언하고 MembershipProvider 클래스를 상속하기만 하면 됩니다. MembershipProvider 클래스에는 멤버십 관련 메서드와 속성이 포함되어 있습니다.
솔루션 탐색기에서 "새 항목 추가.."를 사용하여 클래스를 추가하고 이름을 AccessMembershipProvider.vb로 지정한 다음 시스템 메시지에 따라 App_Code 디렉터리에 배치합니다.
다음으로 해당 네임스페이스를 참조하여 다음과 같이 프로그램의 프레임워크를 작성합니다
.
System.Data
공용 클래스 AccessMembershipProvider를
가져옵니다.
MembershipProvider 상속
사용자 정의 공급자를 사용하려면
End Class가
web.config에서 관련 구성을 만들어야 합니다.새 web.config 파일을 추가하고 다음 코드를 작성할 수 있습니다.
<system.web>
<인증 모드="양식"/>
<회원가입
defaultProvider="AccessMembershipProvider" >
<공급자>
<이름 추가="AccessMembershipProvider"
유형="AccessMembershipProvider"
requireQuestionAndAnswer="true"
ConnectionString="공급자=Microsoft.Jet.
OLEDB.4.0;데이터 원본=C:NewMembershipProvider
App_DataMembers.mdb;보안 유지
정보=거짓" />
</공급자>
</멤버십>
</system.web>
그 중 다음 사항에 주의하세요.
인증 방법은 "Forms"(authentication mode="forms")로 선택되어야 합니다.
<add> 태그를 사용하여 AccessMembershipProvider라는 사용자 지정 공급자를 추가하세요. .
requireQuestionAndAnswer 속성은 해당 값이 true인 경우 신규 등록 중에 프롬프트 질문과 대답을 입력해야 함을 나타냅니다.
ConnectionString은 데이터베이스에 연결하기 위한 연결 문자열을 나타냅니다.
DefaultProvider 특성은 시스템에서 기본적으로 사용하는 공급자를 나타냅니다.
AccessMembershipProvider.vb에서 다음 개인 멤버
Private connStr을 문자열로
추가할 수 있기 때문입니다.
새 OleDb.OleDbCommand로 개인 통신
Private _requiresQuestionAndAnswer As Boolean
Private _minRequiredPasswordLength를 Integer로
하고 초기화() 메소드를 추가하면 코드는 다음과 같습니다.
Public Overrides Sub 초기화(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
'===에 설정된 속성 값을 검색합니다.
'web.config 및 지역 변수에 할당===
config("requiresQuestionAndAnswer") = "true"인 경우 그러면 _
_requiresQuestionAndAnswer = 참
connStr = config("connectionString")
MyBase.Initialize(이름, 구성)
End Sub
공급자가 로드되면 초기화() 메서드가 호출됩니다. 지금 막 web.config 파일에서 <add> 태그를 사용하여 설정한 다양한 속성값을 이 방법으로 읽어올 수 있습니다. 예를 들어, config 매개변수를 사용하여 읽을 수 있습니다. 위 코드에서는 config("connectionString")을 사용하여 데이터베이스 연결 문자열을 읽고 이를 connStr 변수에 넣습니다. 그런 다음 RequiresQuestionAndAnswer 속성을 다음과 같이 설정합니다.
Public Overrides ReadOnly Property _
RequiresQuestionAndAnswer() _
부울로
얻다
_requiresQuestionAndAnswer = True인 경우 그러면
참을 반환
또 다른
거짓 반환
종료 조건
종료 종료
End 속성
이 속성의 값을 설정해야 합니다. 그렇지 않으면 CreateUserWizard 컨트롤에서 암호 프롬프트 질문과 암호 프롬프트 대답이라는 두 개의 텍스트 상자가 표시되지 않습니다.
다음으로, 새 사용자를 생성하는 코드 작성을 시작할 수 있습니다. CreateUser() 메서드의 코드는 다음과 같습니다.
Public Overrides Function CreateUser(ByVal 사용자 이름 As String, ByVal 비밀번호 As String, ByVal email As String, ByVal PasswordQuestion As String , ByVal PasswordAnswer As String , ByVal isApproved As Boolean, ByVal 공급자UserKey As Object, ByRef 상태 As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
새로운 OleDb.OleDbConnection(connStr)로 Dim conn
노력하다
연결.열기()
Dim sql As String = "멤버십 값에 삽입(" & _
"@사용자 이름, @비밀번호, @이메일, " & _
" @passwordQuestion, @passwordAnswer )"
Dim comm을 새 OleDb.OleDbCommand(sql, conn)로 사용
comm.Parameters.AddWithValue("@username", 사용자 이름)
comm.Parameters.AddWithValue("@password", 비밀번호)
comm.Parameters.AddWithValue("@email", 이메일)
comm.Parameters.AddWithValue("@passwordQuestion",passwordQuestion)
comm.Parameters.AddWithValue("@passwordAnswer",passwordAnswer)
Dim 결과 As Integer = comm.ExecuteNonQuery()
conn.Close()
상태 = MembershipCreateStatus.Success
Dim 사용자 As New MembershipUser("AccessMembershipProvider", 사용자 이름, Nothing, 이메일, 비밀번호질문, Nothing, True, False, Now, Nothing, Nothing, Nothing, Nothing)
복귀 사용자
ex를 예외로 잡아라
상태 = MembershipCreateStatus.UserRejected
아무것도 반환하지 않음
시도 종료
End Function
위 코드를 해석해 보겠습니다. 먼저 데이터베이스에 레코드를 삽입합니다. 새 사용자가 성공적으로 추가된 후 상태 정보 상태를 반환해야 합니다(상태는 System.Web.Security .MembershipCreateStatus로 전달됨). 메서드), MembershipUser 클래스의 인스턴스를 반환하려고 하므로 해당 인스턴스를 다음과 같은 방식으로 반환합니다.
Dim user As New MembershipUser("AccessMembershipProvider", username, Nothing, email, PasswordQuestion, Nothing, True , False, Now, Nothing, Nothing, Nothing, Nothing)
그중에는 MembershipUser 클래스의 메서드를 사용하는 생성자가 많이 있습니다. 자세한 내용은 MSDN을 확인하세요. 여기서는 사용자 이름, 이메일, 비밀번호 질문, 생성 날짜(계정 생성 날짜, NOW 는)만 사용합니다. 여기에 사용됨).
로그인 페이지에서 합법적인 사용자가 로그인하고 있는지 확인하려면 다음 코드를 작성해야 합니다.
Public Overrides Function ValidateUser( _
ByVal 사용자 이름은 문자열, _
ByVal 암호를 문자열로) As Boolean
Dim conn As New OleDb.OleDbConnection(connStr)
노력하다
연결.열기()
Dim SQL As String = _
"여기에서 *를 선택하세요." & _
" 사용자 이름=@사용자 이름 AND 비밀번호=@password "
Dim comm을 새 OleDb.OleDbCommand(sql, conn)로 사용
comm.Parameters.AddWithValue("@username", _
사용자 이름)
comm.Parameters.AddWithValue("@password", _
비밀번호)
희미한 리더 As OleDb.OleDbDataReader = _
comm.ExecuteReader
reader.HasRows인 경우
참을 반환
또 다른
거짓 반환
종료 조건
conn.Close()
예외로 ex 캐치
Console.Write(ex.ToString)
거짓 반환
시도 종료
End Function은
이와 같이 로그인, 등록 및 기타 제어와 함께 사용할 수 있는 간단한 사용자 정의 공급자가 완성됩니다. 프로그램을 실행하면 먼저 사용자 등록 페이지가 나타납니다. 사용자가 성공적으로 등록되면 다음 그림과 같이 로그인 페이지로 이동됩니다.