사용자 계정 만들기(VB)
로 스콧 미첼
참고 항목
이 문서를 작성한 이후 ASP.NET 멤버 자격 공급자는 ASP.NET ID로 대체되었습니다. 이 문서를 작성할 때 추천한 멤버 자격 공급자가 아닌 ASP.NET ID 플랫폼을 사용하도록 앱을 업데이트하는 것이 좋습니다. ASP.NET ID는 ASP.NET 멤버 자격 시스템에 비해 다음과 같은 여러 가지 이점이 있습니다.
- 성능 향상
- 향상된 확장성 및 테스트 용이성
- OAuth, OpenID Connect 및 2단계 인증 지원
- 클레임 기반 ID 지원
- ASP.Net Core와의 상호 운용성 향상
이 자습서에서는 멤버 자격 프레임워크(SqlMembershipProvider를 통해)를 사용하여 새 사용자 계정을 만드는 방법을 살펴봅니다. ASP를 통해 프로그래밍 방식으로 새 사용자를 만드는 방법을 살펴보겠습니다. NET의 기본 제공 CreateUserWizard 컨트롤입니다.
소개
이전 자습서에서는 데이터베이스에 애플리케이션 서비스 스키마를 설치했습니다. 이 스키마는 다음에 필요한 테이블, 뷰 및 저장 프로시저를 SqlMembershipProvider
SqlRoleProvider
추가했습니다. 이렇게 하면 이 시리즈의 나머지 자습서에 필요한 인프라가 생성되었습니다. 이 자습서에서는 멤버 자격 프레임워크(를 통해 SqlMembershipProvider
)를 사용하여 새 사용자 계정을 만드는 방법을 살펴봅니다. ASP를 통해 프로그래밍 방식으로 새 사용자를 만드는 방법을 살펴보겠습니다. NET의 기본 제공 CreateUserWizard 컨트롤입니다.
새 사용자 계정을 만드는 방법을 배우는 것 외에도 양식 인증 개요 자습서에서 처음 만든 데모 웹 사이트를 업데이트해야 합니다. 데모 웹 애플리케이션에는 하드 코딩된 사용자 이름/암호 쌍에 대해 사용자의 자격 증명의 유효성을 검사하는 로그인 페이지가 있습니다. 또한 Global.asax
인증된 사용자에 대한 사용자 지정 IPrincipal
및 IIdentity
개체를 만드는 코드도 포함됩니다. 멤버 자격 프레임워크에 대해 사용자의 자격 증명의 유효성을 검사하고 사용자 지정 보안 주체 및 ID 논리를 제거하도록 로그인 페이지를 업데이트합니다.
그럼 시작하겠습니다.
양식 인증 및 멤버 자격 검사 목록
멤버 자격 프레임워크 작업을 시작하기 전에 잠시 시간을 내어 이 시점에 도달하기 위해 수행한 중요한 단계를 검토해 보겠습니다. 양식 기반 인증 시나리오에서 멤버 자격 프레임워크 SqlMembershipProvider
를 사용하는 경우 웹 애플리케이션에서 멤버 자격 기능을 구현하기 전에 다음 단계를 수행해야 합니다.
- 양식 기반 인증을 사용하도록 설정합니다. 양식 인증 개요에서 설명한 대로 요소
mode
의 특성을Forms
편집Web.config
하고 설정하여 양식 인증을<authentication>
사용하도록 설정합니다. 양식 인증을 사용하도록 설정하면 들어오는 각 요청이 양식 인증 티켓에 대해 검사되며, 있는 경우 요청자를 식별합니다. - 적절한 데이터베이스에 애플리케이션 서비스 스키마를 추가합니다. 이 스키마를
SqlMembershipProvider
사용하는 경우 데이터베이스에 애플리케이션 서비스 스키마를 설치해야 합니다. 일반적으로 이 스키마는 애플리케이션의 데이터 모델을 보유하는 동일한 데이터베이스에 추가됩니다. SQL Server에서 멤버 자격 스키마 만들기 자습서에서는 도구를 사용하여aspnet_regsql.exe
이 작업을 수행하는 방법을 살펴보았습니다. - 2단계에서 데이터베이스를 참조하도록 웹 애플리케이션의 설정을 사용자 지정합니다. SQL Server에서 멤버 자격 스키마 만들기 자습서에서는 2단계에서 선택한 데이터베이스를 사용하도록 웹 애플리케이션
SqlMembershipProvider
을 구성하는 두 가지 방법을 보여 줍니다. 즉, 연결 문자열 이름을 수정LocalSqlServer
하거나 멤버 자격 프레임워크 공급자 목록에 등록된 새 공급자를 추가하고 2단계에서 데이터베이스를 사용하도록 새 공급자를 사용자 지정합니다.
양식 기반 인증을 사용하는 SqlMembershipProvider
웹 애플리케이션을 빌드하는 경우 클래스 또는 ASP.NET 로그인 웹 컨트롤을 사용하기 Membership
전에 다음 세 단계를 수행해야 합니다. 이전 자습서에서 이러한 단계를 이미 수행했으므로 멤버 자격 프레임워크를 사용할 준비가 완료되었습니다.
1단계: 새 ASP.NET 페이지 추가
이 자습서와 다음 세 가지에서는 다양한 멤버 자격 관련 함수 및 기능을 검사합니다. 이러한 자습서 전체에서 검사된 항목을 구현하려면 일련의 ASP.NET 페이지가 필요합니다. 해당 페이지를 만든 다음 사이트 맵 파일을 (Web.sitemap)
만들어 보겠습니다.
먼저 프로젝트에 새 폴더를 만듭니다 Membership
. 그런 다음 폴더에 5개의 새 ASP.NET 페이지를 Membership
추가하여 각 페이지를 마스터 페이지와 Site.master
연결합니다. 페이지 이름을 지정합니다.
CreatingUserAccounts.aspx
UserBasedAuthorization.aspx
EnhancedCreateUserWizard.aspx
AdditionalUserInfo.aspx
Guestbook.aspx
이 시점에서 프로젝트의 솔루션 탐색기 그림 1에 표시된 스크린샷과 유사하게 표시됩니다.
그림 1: 폴더에 5개의 새 페이지가 Membership
추가되었습니다(전체 크기 이미지를 보려면 클릭).
이 시점에서 각 페이지에는 마스터 페이지의 ContentPlaceHolders MainContent
각각에 대해 하나씩 두 개의 콘텐츠 컨트롤이 LoginContent
있어야 합니다.
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"
Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="LoginContent"
Runat="Server">
</asp:Content>
LoginContent
ContentPlaceHolder의 기본 태그는 사용자가 인증되었는지 여부에 따라 사이트에 로그온하거나 로그오프할 수 있는 링크를 표시합니다. 그러나 콘텐츠 컨트롤의 Content2
존재는 마스터 페이지의 기본 태그를 재정의합니다. 양식 인증 개요 자습서에서 설명한 것처럼 왼쪽 열에 로그인 관련 옵션을 표시하지 않으려는 페이지에서 유용합니다.
그러나 이 다섯 페이지의 경우 ContentPlaceHolder에 대한 마스터 페이지의 기본 태그를 LoginContent
표시하려고 합니다. 따라서 콘텐츠 컨트롤에 대한 선언적 태그를 Content2
제거합니다. 이렇게 하면 5개 페이지의 태그 각각에 하나의 콘텐츠 컨트롤만 포함되어야 합니다.
2단계: 사이트 맵 만들기
가장 간단한 웹 사이트를 제외한 모든 웹 사이트는 탐색 사용자 인터페이스의 어떤 형태를 구현해야합니다. 탐색 사용자 인터페이스는 사이트의 다양한 섹션에 대한 간단한 링크 목록일 수 있습니다. 또는 이러한 링크를 메뉴 또는 트리 보기로 정렬할 수 있습니다. 페이지 개발자로서 탐색 사용자 인터페이스를 만드는 것은 스토리의 절반에 불과합니다. 또한 유지 관리 가능하고 업데이트 가능한 방식으로 사이트의 논리적 구조를 정의하는 몇 가지 수단이 필요합니다. 새 페이지가 추가되거나 기존 페이지가 제거되면 사이트 맵이라는 단일 원본을 업데이트하고 사이트의 탐색 사용자 인터페이스에 해당 수정 내용이 반영되도록 합니다.
사이트 맵을 정의하고 사이트 맵을 기반으로 탐색 사용자 인터페이스를 구현하는 이러한 두 작업은 사이트 맵 프레임워크와 ASP.NET 버전 2.0에 추가된 탐색 웹 컨트롤 덕분에 쉽게 수행할 수 있습니다. 사이트 맵 프레임워크를 사용하면 개발자가 사이트 맵을 정의한 다음 프로그래밍 방식 API( SiteMap
클래스)를 통해 액세스할 수 있습니다. 기본 제공 탐색 웹 컨트롤에는 메뉴 컨트롤, TreeView 컨트롤 및 SiteMapPath 컨트롤이 포함됩니다.
멤버 자격 및 역할 프레임워크와 마찬가지로 사이트 맵 프레임워크는 공급자 모델 위에 빌드됩니다. 사이트 맵 공급자 클래스의 작업은 XML 파일 또는 데이터베이스 테이블과 같은 영구 데이터 저장소에서 클래스가 사용하는 SiteMap
메모리 내 구조를 생성하는 것입니다. .NET Framework는 XML 파일(XmlSiteMapProvider
)에서 사이트 맵 데이터를 읽는 기본 사이트 맵 공급자와 함께 제공되며, 이 공급자는 이 자습서에서 사용할 공급자입니다. 일부 대체 사이트 맵 공급자 구현은 이 자습서의 끝에 있는 추가 읽기 섹션을 참조하세요.
기본 사이트 맵 공급자에는 루트 디렉터리가 존재하도록 명명 Web.sitemap
된 올바른 형식의 XML 파일이 필요합니다. 이 기본 공급자를 사용하므로 이러한 파일을 추가하고 적절한 XML 형식으로 사이트 맵의 구조를 정의해야 합니다. 파일을 추가하려면 솔루션 탐색기 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 새 항목 추가를 선택합니다. 대화 상자에서 사이트 맵 형식 Web.sitemap
의 파일을 추가하도록 선택합니다.
그림 2: 프로젝트의 루트 디렉터리에 명명된 Web.sitemap
파일 추가(전체 크기 이미지를 보려면 클릭)
XML 사이트 맵 파일은 웹 사이트의 구조를 계층 구조로 정의합니다. 이 계층적 관계는 요소의 조상을 통해 XML 파일에서 모델링됩니다 <siteMapNode>
. Web.sitemap
정확히 하나의 <siteMapNode>
자식이 있는 <siteMap>
부모 노드로 시작해야 합니다. 이 최상위 <siteMapNode>
요소는 계층의 루트를 나타내며 임의 수의 하위 노드가 있을 수 있습니다. 각 <siteMapNode>
요소는 특성을 포함 title
해야 하며 필요에 따라 특성과 description
특성을 포함 url
할 수 있습니다. 비어 url
있지 않은 각 특성은 고유해야 합니다.
파일에 다음 XML을 입력합니다 Web.sitemap
.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/Default.aspx" title="Home">
<siteMapNode title="Membership">
<siteMapNode url="~/Membership/CreatingUserAccounts.aspx" title="Creating User Accounts" />
<siteMapNode url="~/Membership/UserBasedAuthorization.aspx" title="User-Based Authorization" />
<siteMapNode url="~/Membership/Guestbook.aspx" title="Storing Additional User Information" />
</siteMapNode>
</siteMapNode>
</siteMap>
위의 사이트 맵 태그는 그림 3에 표시된 계층 구조를 정의합니다.
그림 3: 사이트 맵은 계층적 탐색 구조를 나타냅니다(전체 크기 이미지를 보려면 클릭).
3단계: 탐색 사용자 인터페이스를 포함하도록 마스터 페이지 업데이트
ASP.NET 사용자 인터페이스를 디자인하기 위한 여러 탐색 관련 웹 컨트롤이 포함되어 있습니다. 메뉴, TreeView 및 SiteMapPath 컨트롤이 포함됩니다. 메뉴 및 TreeView 컨트롤은 각각 메뉴 또는 트리에서 사이트 맵 구조를 렌더링하는 반면 SiteMapPath는 방문 중인 현재 노드와 상위 노드를 보여 주는 이동 경로를 표시합니다. 사이트 맵 데이터는 SiteMapDataSource를 사용하여 다른 데이터 웹 컨트롤에 바인딩할 수 있으며 클래스를 통해 SiteMap
프로그래밍 방식으로 액세스할 수 있습니다.
사이트 맵 프레임워크 및 탐색 컨트롤에 대한 철저한 논의는 이 자습서 시리즈의 범위를 벗어나므로 자체 탐색 사용자 인터페이스를 만드는 데 시간을 할애하는 대신 반복기 컨트롤을 사용하여 탐색 링크의 2개의 깊은 글머리 기호 목록을 표시하는 ASP.NET 2.0 자습서 시리즈의 데이터 작업에서 사용되는 인터페이스를 차용해 보겠습니다. 그림 4와 같습니다.
왼쪽 열에 2단계 링크 목록 추가
이 인터페이스를 만들려면 다음 선언적 태그를 마스터 페이지의 왼쪽 열에 Site.master
추가하여 TODO: 메뉴가 여기에 표시됩니다. 현재 상주합니다.
<ul>
<li>
<asp:HyperLink runat="server" ID="lnkHome" NavigateUrl="~/Default.aspx">Home</asp:HyperLink>
</li>
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink ID="lnkMenuItem" runat="server"
NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
<asp:Repeater ID="submenu" runat="server" DataSource="<%#
CType(Container.DataItem, SiteMapNode).ChildNodes %>">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="lnkMenuItem"
runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false"/>
위의 태그는 SiteMapDataSource에 명명된 menu
Repeater 컨트롤을 바인딩합니다. 이 컨트롤은 에 정의된 Web.sitemap
사이트 맵 계층 구조를 반환합니다. SiteMapDataSource 컨트롤의 ShowStartingNode
속성 은 False로 설정되므로 홈 노드의 하위 항목부터 시작하여 사이트 맵의 계층 구조를 반환하기 시작합니다. 반복기는 요소에 이러한 각 노드(현재 멤버 자격만)를 <li>
표시합니다. 또 다른 내부 반복기는 현재 노드의 자식을 중첩된 순서가 지정되지 않은 목록에 표시합니다.
그림 4에서는 2단계에서 만든 사이트 맵 구조를 사용하여 위의 태그의 렌더링된 출력을 보여 줍니다. 반복기는 순서가 지정되지 않은 바닐라 목록 태그를 렌더링합니다. 정의된 Styles.css
계단식 스타일시트 규칙은 심미적으로 만족스러운 레이아웃을 담당합니다. 위의 태그 작동 방식에 대한 자세한 설명은 마스터 페이지 및 사이트 탐색 자습서를 참조하세요.
그림 4: 탐색 사용자 인터페이스가 중첩된 정렬되지 않은 목록을 사용하여 렌더링됨(전체 크기 이미지를 보려면 클릭)
이동 경로 탐색 추가
왼쪽 열의 링크 목록 외에도 각 페이지에 이동 경로가 표시되도록 하겠습니다. 이동 경로는 사이트 계층 구조 내에서 사용자에게 현재 위치를 빠르게 표시하는 탐색 사용자 인터페이스 요소입니다. SiteMapPath 컨트롤은 사이트 맵 프레임워크를 사용하여 사이트 맵에서 현재 페이지의 위치를 확인한 다음 이 정보를 기반으로 이동 경로를 표시합니다.
특히 마스터 페이지의 헤더 <div>
요소에 요소를 추가하고 <span>
새 <span>
요소의 class
특성을 이동 경로로 설정합니다. (클래스에는 Styles.css
이동 경로 클래스에 대한 규칙이 포함되어 있습니다.) 다음으로 이 새 <span>
요소에 SiteMapPath를 추가합니다.
<div id="header">
<span class="title">User Account Tutorials</span><br />
<span class="breadcrumb">
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
</span>
</div>
그림 5는 방문 시 SiteMapPath의 출력을 ~/Membership/CreatingUserAccounts.aspx
보여줍니다.
그림 5: 이동 경로가 사이트 맵에 현재 페이지와 상위 항목을 표시합니다(전체 크기 이미지를 보려면 클릭).
4단계: 사용자 지정 보안 주체 및 ID 논리 제거
사용자 지정 보안 주체 및 ID 개체는 인증된 사용자에 연결할 수 있습니다. 애플리케이션의 PostAuthenticateRequest
이벤트에 대한 이벤트 처리기를 만들어 이 작업을 수행했습니다. 이 처리기는 Global.asax
사용자를 인증한 후에 FormsAuthenticationModule
발생합니다. 이 이벤트 처리기에서 추가된 GenericPrincipal
개체 FormsAuthenticationModule
와 FormsIdentity
해당 자습서에서 만든 개체를 CustomPrincipal
CustomIdentity
대체했습니다.
사용자 지정 보안 주체 및 ID 개체는 특정 시나리오에서 유용하지만 대부분의 경우 개체와 FormsIdentity
개체로 충분합니다GenericPrincipal
. 따라서 기본 동작으로 돌아가는 것이 가치가 있다고 생각합니다. 이벤트 처리기를 제거하거나 주석 처리 PostAuthenticateRequest
하거나 파일을 완전히 삭제하여 Global.asax
변경합니다.
참고 항목
코드를 Global.asax
주석 처리하거나 제거한 후에는 속성을 CustomIdentity
인스턴스로 캐스팅 User.Identity
하는 코드 숨김 클래스의 Default.aspx's
코드를 주석 처리해야 합니다.
5단계: 프로그래밍 방식으로 새 사용자 만들기
멤버 자격 프레임워크를 통해 새 사용자 계정을 만들려면 클래스의 CreateUser
메서드를 Membership
사용합니다. 이 메서드에는 사용자 이름, 암호 및 기타 사용자 관련 필드에 대한 입력 매개 변수가 있습니다. 호출할 때 새 사용자 계정 생성을 구성된 멤버 자격 공급자에게 위임한 다음 방금 만든 사용자 계정을 나타내는 개체를 반환 MembershipUser
합니다.
메서드에는 CreateUser
각각 다른 수의 입력 매개 변수를 허용하는 4개의 오버로드가 있습니다.
CreateUser(username, password)
CreateUser(username, password, email)
CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, MembershipCreateStatus)
CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, MembershipCreateStatus)
이러한 4개의 오버로드는 수집되는 정보의 양에 따라 다릅니다. 예를 들어 첫 번째 오버로드는 새 사용자 계정에 대한 사용자 이름 및 암호만 필요하지만 두 번째 오버로드는 사용자의 이메일 주소도 필요합니다.
이러한 오버로드는 새 사용자 계정을 만드는 데 필요한 정보가 멤버 자격 공급자의 구성 설정에 따라 달라지므로 존재합니다. SQL Server에서 멤버 자격 스키마 만들기 자습서에서는 .에서 멤버 자격 공급자 구성 설정을 지정하는 것을 검토했습니다.Web.config
표 2에는 구성 설정의 전체 목록이 포함되어 있습니다.
사용할 수 있는 오버로드에 CreateUser
영향을 주는 멤버 자격 공급자 구성 설정 중 하나가 설정입니다 requiresQuestionAndAnswer
. 기본값으로 true
설정된 경우 requiresQuestionAndAnswer
새 사용자 계정을 만들 때 보안 질문과 대답을 지정해야 합니다. 이 정보는 나중에 사용자가 암호를 재설정하거나 변경해야 하는 경우에 사용됩니다. 특히, 이때 보안 질문이 표시되며 암호를 재설정하거나 변경하려면 정답을 입력해야 합니다. 따라서 처음 두 CreateUser
오버로드 중 하나를 호출하도록 true
설정된 경우 requiresQuestionAndAnswer
보안 질문과 대답이 누락되어 예외가 발생합니다. 애플리케이션은 현재 보안 질문과 대답이 필요하도록 구성되어 있으므로 사용자를 프로그래밍 방식으로 만들 때 후자의 두 오버로드 중 하나를 사용해야 합니다.
메서드 사용을 CreateUser
설명하기 위해 사용자에게 이름, 암호, 전자 메일 및 미리 정의된 보안 질문에 대한 답변을 묻는 메시지를 표시하는 사용자 인터페이스를 만들어 보겠습니다. 폴더에서 CreatingUserAccounts.aspx
Membership
페이지를 열고 콘텐츠 컨트롤에 다음 웹 컨트롤을 추가합니다.
- TextBox
Username
- 속성이
TextModegt;로 설정된 TextBox입니다 Password
.Password
- TextBox
Email
- 해당
Text
속성이 지워진 레이블SecurityQuestion
- TextBox
SecurityAnswer
- 해당 속성이
Text
사용자 계정 만들기로 설정된 단추CreateAccountButton
- 해당
Text
속성이 지워진 레이블CreateAccountResults
컨트롤
이 시점에서 화면은 그림 6에 표시된 스크린샷과 유사하게 표시됩니다.
그림 6: 다양한 웹 컨트롤을 CreatingUserAccounts.aspx Page
추가합니다(전체 크기 이미지를 보려면 클릭).
SecurityQuestion
Label 및 SecurityAnswer
TextBox는 미리 정의된 보안 질문을 표시하고 사용자의 답변을 수집하기 위한 것입니다. 보안 질문과 답변은 모두 사용자 단위로 저장되므로 각 사용자가 고유한 보안 질문을 정의할 수 있습니다. 그러나 이 예제에서는 범용 보안 질문, 즉 즐겨찾는 색을 사용하기로 결정했습니다.
이 미리 정의된 보안 질문을 구현하려면 페이지의 코드 숨김 클래스 passwordQuestion
에 상수를 추가하여 보안 질문을 할당합니다. 그런 다음, 이벤트 처리기에서 Page_Load
Label의 Text
속성에 이 상수에 SecurityQuestion
할당합니다.
Const passwordQuestion As String = "What is your favorite color"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
SecurityQuestion.Text = passwordQuestion
End If
End Sub
다음으로, 이벤트에 Click
대한 CreateAccountButton'
이벤트 처리기를 만들고 다음 코드를 추가합니다.
Protected Sub CreateAccountButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CreateAccountButton.Click
Dim createStatus As MembershipCreateStatus
Dim newUser As MembershipUser = _
Membership.CreateUser(Username.Text, Password.Text, _
Email.Text, passwordQuestion, _
SecurityAnswer.Text, True, _
createStatus)
Select Case createStatus
Case MembershipCreateStatus.Success
CreateAccountResults.Text = "The user account was successfully created!"
Case MembershipCreateStatus.DuplicateUserName
CreateAccountResults.Text = "There already exists a user with this username."
Case MembershipCreateStatus.DuplicateEmail
CreateAccountResults.Text = "There already exists a user with this email address."
Case MembershipCreateStatus.InvalidEmail
CreateAccountResults.Text = "There email address you provided in invalid."
Case MembershipCreateStatus.InvalidAnswer
CreateAccountResults.Text = "There security answer was invalid."
Case MembershipCreateStatus.InvalidPassword
CreateAccountResults.Text = "The password you provided is invalid. It must be seven characters long and have at least one non-alphanumeric character."
Case Else
CreateAccountResults.Text = "There was an unknown error; the user account was NOT created."
End Select
End Sub
Click
이벤트 처리기는 형식MembershipCreateStatus
의 변수 createStatus
를 정의하여 시작합니다. MembershipCreateStatus
는 작업의 상태를 나타내는 열거형입니다 CreateUser
. 예를 들어 사용자 계정이 성공적으로 만들어지면 결과 MembershipCreateStatus
인스턴스가 다른 한편으로는 값 Success;
으로 설정되고, 동일한 사용자 이름을 가진 사용자가 이미 있기 때문에 작업이 실패하면 해당 인스턴스가 값 DuplicateUserName
으로 설정됩니다. CreateUser
사용하는 오버로드에서 인스턴스를 MembershipCreateStatus
메서드에 전달해야 합니다. 이 매개 변수는 메서드 내에서 CreateUser
적절한 값으로 설정되며 메서드 호출 후 해당 값을 검사하여 사용자 계정이 성공적으로 만들어졌는지 여부를 확인할 수 있습니다.
호출 CreateUser
하고 전달 createStatus
한 Select Case
후에는 할당된 createStatus
값에 따라 적절한 메시지를 출력하는 데 문이 사용됩니다. 그림 7은 새 사용자가 성공적으로 만들어진 경우의 출력을 보여 줍니다. 그림 8과 9는 사용자 계정이 만들어지지 않은 경우 출력을 보여 줍니다. 그림 8에서 방문자는 멤버 자격 공급자의 구성 설정에 설명된 암호 강도 요구 사항을 충족하지 않는 5자 암호를 입력했습니다. 그림 9에서 방문자는 기존 사용자 이름을 사용하여 사용자 계정을 만들려고 합니다(그림 7에서 만든 계정).
그림 7: 새 사용자 계정이 성공적으로 생성됨(전체 크기 이미지를 보려면 클릭)
그림 8: 제공된 암호가 너무 약하여 사용자 계정이 만들어지지 않음(전체 크기 이미지를 보려면 클릭)
그림 9: 사용자 이름이 이미 사용 중이므로 사용자 계정이 만들어지지 않았습니다(전체 크기 이미지를 보려면 클릭).
참고 항목
처음 두 CreateUser
메서드 오버로드 중 하나를 사용할 때 성공 또는 실패를 확인하는 방법이 궁금할 수 있습니다. 둘 중 하나에 형식 MembershipCreateStatus
의 매개 변수가 없는 경우 이러한 처음 두 오버로드는 오류 발생 시 예외를 throw MembershipCreateUserException
합니다. 여기에는 형식MembershipCreateStatus
의 속성이 StatusCode
포함됩니다.
몇 개의 사용자 계정을 만든 후 데이터베이스의 목차 및 aspnet_Membership
테이블을 SecurityTutorials.mdf
나열하여 계정이 만들어졌는지 확인합니다aspnet_Users
. 그림 10에서 보여 주듯이, 페이지를 통해 CreatingUserAccounts.aspx
Tito와 Bruce라는 두 명의 사용자를 추가했습니다.
그림 10: 멤버 자격 사용자 저장소에 두 명의 사용자가 있습니다. Tito 및 Bruce(전체 크기 이미지를 보려면 클릭)
멤버 자격 사용자 저장소에는 이제 Bruce 및 Tito의 계정 정보가 포함되어 있지만 Bruce 또는 Tito가 사이트에 로그온할 수 있는 기능을 구현하지 못했습니다. 현재 하드 Login.aspx
코딩된 사용자 이름/암호 쌍 집합에 대해 사용자의 자격 증명의 유효성을 검사합니다. 멤버 자격 프레임워크에 대해 제공된 자격 증명의 유효성을 검사하지 않습니다. 지금은 테이블과 aspnet_Membership
테이블에 새 사용자 계정을 aspnet_Users
보는 것으로 충분해야 합니다. 멤버 자격 사용자 저장소에 대해 사용자 자격 증명의 유효성을 검사하는 다음 자습서 에서는 멤버 자격 저장소에 대해 유효성을 검사하도록 로그인 페이지를 업데이트합니다.
참고 항목
데이터베이스에 사용자가 표시되지 않는 경우 웹 애플리케이션이 SecurityTutorials.mdf
데이터베이스를 사용자 저장소로 사용하는 기본 멤버 자격 공급자 AspNetSqlMembershipProvider
를 ASPNETDB.mdf
사용하고 있기 때문일 수 있습니다. 이것이 문제인지 확인하려면 솔루션 탐색기 새로 고침 단추를 클릭합니다. 명명 ASPNETDB.mdf
된 데이터베이스가 폴더에 App_Data
추가된 경우 문제가 발생합니다. 멤버 자격 공급자를 올바르게 구성하는 방법에 대한 지침은 SQL Server에서 멤버 자격 스키마 만들기 자습서의 4단계로 돌아갑니다.
대부분의 사용자 계정 만들기 시나리오에서 방문자는 사용자 이름, 암호, 전자 메일 및 기타 필수 정보를 입력하는 일부 인터페이스를 제공하며, 이때 새 계정이 만들어집니다. 이 단계에서는 이러한 인터페이스를 직접 빌드하는 방법을 살펴본 다음, 메서드를 사용하여 Membership.CreateUser
사용자의 입력에 따라 새 사용자 계정을 프로그래밍 방식으로 추가하는 방법을 살펴보았습니다. 그러나 코드는 방금 새 사용자 계정을 만들었습니다. 방금 만든 사용자 계정으로 사이트에 사용자를 로그인하거나 사용자에게 확인 이메일을 보내는 등의 후속 작업을 수행하지 않았습니다. 이러한 추가 단계에는 Button의 Click
이벤트 처리기에 추가 코드가 필요합니다.
ASP.NET 사용자 계정 만들기 프로세스를 처리하도록 설계된 CreateUserWizard 컨트롤과 함께 제공됩니다. 이 컨트롤은 새 사용자 계정을 만들기 위한 사용자 인터페이스를 렌더링하는 것부터 멤버 자격 프레임워크에서 계정을 만들고, 확인 전자 메일을 보내고 방금 만든 사용자를 사이트에 로깅하는 등의 사후 계정 만들기 작업을 수행합니다. CreateUserWizard 컨트롤을 사용하는 것은 도구 상자에서 페이지로 CreateUserWizard 컨트롤을 끌어온 다음 몇 가지 속성을 설정하는 것만큼 간단합니다. 대부분의 경우 한 줄의 코드를 작성할 필요가 없습니다. 6단계에서 이 멋진 컨트롤을 자세히 살펴보겠습니다.
새 사용자 계정이 일반적인 계정 만들기 웹 페이지를 통해서만 만들어지는 경우 CreateUserWizard 컨트롤이 요구 사항을 충족할 수 있으므로 메서드를 사용하는 CreateUser
코드를 작성할 필요가 없습니다. 그러나 이 CreateUser
방법은 고도로 사용자 지정된 계정 만들기 사용자 환경이 필요하거나 대체 인터페이스를 통해 프로그래밍 방식으로 새 사용자 계정을 만들어야 하는 시나리오에서 유용합니다. 예를 들어 사용자가 다른 애플리케이션의 사용자 정보를 포함하는 XML 파일을 업로드할 수 있는 페이지가 있을 수 있습니다. 이 페이지는 업로드된 XML 파일의 내용을 구문 분석하고 메서드를 호출 CreateUser
하여 XML에 표시되는 각 사용자에 대한 새 계정을 만들 수 있습니다.
6단계: CreateUserWizard 컨트롤을 사용하여 새 사용자 만들기
ASP.NET 다양한 로그인 웹 컨트롤과 함께 제공합니다. 이러한 컨트롤은 많은 일반적인 사용자 계정 및 로그인 관련 시나리오를 지원합니다. CreateUserWizard 컨트롤은 멤버 자격 프레임워크에 새 사용자 계정을 추가하기 위한 사용자 인터페이스를 제공하도록 설계된 컨트롤 중 하나입니다.
다른 많은 로그인 관련 웹 컨트롤과 마찬가지로 CreateUserWizard는 한 줄의 코드를 작성하지 않고도 사용할 수 있습니다. 멤버 자격 공급자의 구성 설정에 따라 사용자 인터페이스를 직관적으로 제공하고 사용자가 필요한 정보를 입력하고 사용자 만들기 단추를 클릭한 후 클래스의 CreateUser
메서드를 내부적으로 호출 Membership
합니다. CreateUserWizard 컨트롤은 매우 사용자 지정할 수 있습니다. 계정 생성 프로세스의 다양한 단계에서 발생하는 이벤트 호스트가 있습니다. 필요에 따라 이벤트 처리기를 만들어 계정 만들기 워크플로에 사용자 지정 논리를 삽입할 수 있습니다. 또한 CreateUserWizard의 모양은 매우 유연합니다. 기본 인터페이스의 모양을 정의하는 여러 속성이 있습니다. 필요한 경우 컨트롤을 템플릿으로 변환하거나 추가 사용자 등록 단계를 추가할 수 있습니다.
먼저 CreateUserWizard 컨트롤의 기본 인터페이스 및 동작 사용을 살펴보겠습니다. 그런 다음 컨트롤의 속성 및 이벤트를 통해 모양을 사용자 지정하는 방법을 살펴보겠습니다.
CreateUserWizard의 기본 인터페이스 및 동작 검사
폴더의 CreatingUserAccounts.aspx
페이지 Membership
로 돌아가 디자인 또는 분할 모드로 전환한 다음 CreateUserWizard 컨트롤을 페이지 맨 위에 추가합니다. CreateUserWizard 컨트롤은 도구 상자의 로그인 컨트롤 섹션 아래에 제출됩니다. 컨트롤을 추가한 후 해당 ID
속성을 .로 RegisterUser
설정합니다. 그림 11의 스크린샷에서와 같이 CreateUserWizard는 새 사용자의 사용자 이름, 암호, 전자 메일 주소, 보안 질문 및 답변에 대한 텍스트 상자가 있는 인터페이스를 렌더링합니다.
그림 11: CreateUserWizard 컨트롤은 일반 만들기 사용자 인터페이스를 렌더링합니다(전체 크기 이미지를 보려면 클릭).
잠시 시간을 내어 CreateUserWizard 컨트롤에서 생성된 기본 사용자 인터페이스와 5단계에서 만든 인터페이스를 비교해 보겠습니다. 우선 CreateUserWizard 컨트롤을 사용하면 방문자가 보안 질문과 대답을 모두 지정할 수 있는 반면, 수동으로 만든 인터페이스는 미리 정의된 보안 질문을 사용했습니다. CreateUserWizard 컨트롤의 인터페이스에는 유효성 검사 컨트롤도 포함되어 있지만 아직 인터페이스의 양식 필드에 유효성 검사를 구현하지 않았습니다. 또한 CreateUserWizard 컨트롤 인터페이스에는 암호 확인 텍스트 상자가 포함되어 있습니다(CompareValidator와 함께 암호 입력한 텍스트와 암호 비교 텍스트 상자가 같은지 확인).
흥미로운 점은 CreateUserWizard 컨트롤이 사용자 인터페이스를 렌더링할 때 멤버 자격 공급자의 구성 설정을 참조한다는 것입니다. 예를 들어 보안 질문 및 답변 텍스트 상자는 True로 설정된 경우에만 requiresQuestionAndAnswer
표시됩니다. 마찬가지로 CreateUserWizard는 자동으로 RegularExpressionValidator 컨트롤을 추가하여 암호 강도 요구 사항이 충족되도록 하고, minRequiredNonalphanumericCharacters
해당 및 속성을 , 및 passwordStrengthRegularExpression
구성 설정에 minRequiredPasswordLength
따라 설정합니다 ErrorMessage
ValidationExpression
.
CreateUserWizard 컨트롤은 이름에서 알 수 있듯이 마법사 컨트롤에서 파생됩니다. 마법사 컨트롤은 다단계 작업을 완료하기 위한 인터페이스를 제공하도록 설계되었습니다. 마법사 컨트롤에는 임의의 개수가 WizardSteps
있을 수 있으며, 각 컨트롤은 해당 단계에 대한 HTML 및 웹 컨트롤을 정의하는 템플릿입니다. 마법사 컨트롤은 처음에 사용자가 한 단계에서 다음 단계로 진행하거나 이전 단계로 돌아갈 수 있도록 하는 탐색 컨트롤과 함께 첫 번째 WizardStep
컨트롤을 표시합니다.
그림 11의 선언적 태그에서 볼 수 있듯이 CreateUserWizard 컨트롤의 기본 인터페이스에는 다음 두 가지 WizardStep
가 포함됩니다.
CreateUserWizardStep
? 는 인터페이스를 렌더링하여 새 사용자 계정을 만들기 위한 정보를 수집합니다. 그림 11에 표시된 단계입니다.CompleteWizardStep
? 는 계정이 성공적으로 만들어졌음을 나타내는 메시지를 렌더링합니다.
CreateUserWizard의 모양과 동작은 이러한 단계 중 하나를 템플릿으로 변환하거나 고유한 WizardStep
단계를 추가하여 수정할 수 있습니다. 추가 사용자 정보 저장 자습서에서 등록 인터페이스에 추가하는 WizardStep
방법을 살펴보겠습니다.
CreateUserWizard 컨트롤의 작동을 살펴보겠습니다. 브라우저를 CreatingUserAccounts.aspx
통해 페이지를 방문합니다. 먼저 CreateUserWizard의 인터페이스에 잘못된 값을 입력합니다. 암호 강도 요구 사항을 준수하지 않는 암호를 입력하거나 사용자 이름 텍스트 상자를 비워 둡니다. CreateUserWizard에 적절한 오류 메시지가 표시됩니다. 그림 12는 암호가 충분하지 않은 사용자를 만들려고 할 때의 출력을 보여줍니다.
그림 12: CreateUserWizard가 유효성 검사 컨트롤을 자동으로 삽입합니다(전체 크기 이미지를 보려면 클릭).
그런 다음 CreateUserWizard에 적절한 값을 입력하고 사용자 만들기 단추를 클릭합니다. 필요한 필드를 입력하고 암호의 강도가 충분하다고 가정하면 CreateUserWizard는 멤버 자격 프레임워크를 통해 새 사용자 계정을 만든 다음 '의 인터페이스를 표시 CompleteWizardStep
합니다(그림 13 참조). 백그라운드에서 CreateUserWizard는 5단계에서 수행한 것처럼 메서드를 호출 Membership.CreateUser
합니다.
그림 13: 새 사용자 계정이 성공적으로 생성되었습니다(전체 크기 이미지를 보려면 클릭).
참고 항목
그림 13과 CompleteWizardStep
같이 '의 인터페이스에는 계속 단추가 포함됩니다. 그러나 이 시점에서 클릭하면 포스트백만 수행되어 방문자가 동일한 페이지에 남게 됩니다. 해당 속성을 통해 CreateUserWizard의 모양 및 동작 사용자 지정 섹션에서 이 단추를 통해 방문자 Default.aspx
를 보내는 방법(또는 다른 페이지)을 살펴봅니다.
새 사용자 계정을 만든 후 Visual Studio로 돌아가 그림 10에서 수행한 것과 같은 테이블 및 aspnet_Membership
테이블을 검사 aspnet_Users
하여 계정이 성공적으로 생성되었는지 확인합니다.
속성을 통해 CreateUserWizard의 동작 및 모양 사용자 지정
CreateUserWizard는 속성, WizardStep
s 및 이벤트 처리기를 통해 다양한 방법으로 사용자 지정할 수 있습니다. 이 섹션에서는 해당 속성을 통해 컨트롤의 모양을 사용자 지정하는 방법을 살펴보겠습니다. 다음 섹션에서는 이벤트 처리기를 통해 컨트롤의 동작을 확장하는 것을 살펴봅니다.
CreateUserWizard 컨트롤의 기본 사용자 인터페이스에 표시되는 거의 모든 텍스트는 다양한 속성을 통해 사용자 지정할 수 있습니다. 예를 들어 텍스트 상자 왼쪽에 표시되는 사용자 이름, 암호, 암호 확인, 전자 메일, 보안 질문 및 보안 답변 레이블은 각각 , PasswordLabelText
, QuestionLabelText
ConfirmPasswordLabelText
EmailLabelText
및 AnswerLabelText
속성으로 UserNameLabelText
사용자 지정할 수 있습니다. 마찬가지로 사용자 만들기 및 계속 단추의 텍스트를 지정하는 속성과 CompleteWizardStep
이러한 단추 CreateUserWizardStep
가 단추, LinkButtons 또는 ImageButtons로 렌더링되는 경우의 속성도 있습니다.
색, 테두리, 글꼴 및 기타 시각적 요소는 다양한 스타일 속성을 통해 구성할 수 있습니다. CreateUserWizard 컨트롤 자체에는 일반적인 웹 컨트롤 스타일 속성BackColor
(, , BorderStyle
, CssClass
Font
등)이 있으며 CreateUserWizard 인터페이스의 특정 섹션에 대한 모양을 정의하기 위한 다양한 스타일 속성이 있습니다. 예를 들어 속성은 텍스트 상자CreateUserWizardStep
의 스타일을 정의하고 TitleTextStyle
속성은 TextBoxStyle
제목 스타일(새 계정에 등록)을 정의합니다.
모양 관련 속성 외에도 CreateUserWizard 컨트롤의 동작에 영향을 주는 여러 속성이 있습니다. True로 설정된 경우 속성은 DisplayCancelButton
사용자 만들기 단추 옆에 취소 단추를 표시합니다(기본값은 False). 취소 단추를 표시하는 경우 취소를 클릭한 후 사용자에게 전송되는 페이지를 지정하는 속성도 설정 CancelDestinationPageUrl
해야 합니다. 이전 섹션에서 설명한 것처럼 ' 인터페이스의 계속 단추 CompleteWizardStep
는 포스트백을 발생하지만 방문자는 동일한 페이지에 남습니다. 계속 단추를 클릭한 후 방문자를 다른 페이지로 보내려면 속성에 URL을 ContinueDestinationPageUrl
지정하기만 하면 됩니다.
취소 단추를 표시하고 취소 또는 계속 단추를 클릭할 때 방문자를 Default.aspx
보내도록 CreateUserWizard 컨트롤을 업데이트 RegisterUser
해 보겠습니다. 이렇게 하려면 속성을 True로 설정하고 속성과 ContinueDestinationPageUrl
속성을 모두 CancelDestinationPageUrl
~/Default.aspx 설정합니다DisplayCancelButton
. 그림 14는 브라우저를 통해 볼 때 업데이트된 CreateUserWizard를 보여 줍니다.
그림 14: CreateUserWizardStep
취소 포함 단추(전체 크기 이미지를 보려면 클릭)
방문자가 사용자 이름, 암호, 전자 메일 주소 및 보안 질문과 대답을 입력하고 사용자 만들기를 클릭하면 새 사용자 계정이 만들어지고 방문자가 새로 만든 사용자로 로그인됩니다. 페이지를 방문하는 사람이 스스로 새 계정을 만들고 있다고 가정하면 원하는 동작일 수 있습니다. 그러나 관리자가 새 사용자 계정을 추가하도록 허용할 수 있습니다. 이렇게 하면 사용자 계정이 만들어지지만 관리자는 새로 만든 계정이 아니라 관리자로 로그인된 상태로 유지됩니다. 이 동작은 부울 LoginCreatedUser
속성을 통해 수정할 수 있습니다.
멤버 자격 프레임워크의 사용자 계정에는 승인된 플래그가 포함됩니다. 승인되지 않은 사용자는 사이트에 로그인할 수 없습니다. 기본적으로 새로 만든 계정은 승인된 것으로 표시되므로 사용자가 즉시 사이트에 로그인할 수 있습니다. 그러나 새 사용자 계정이 승인되지 않은 것으로 표시될 수 있습니다. 관리자가 로그인하기 전에 새 사용자를 수동으로 승인하려고 할 수 있습니다. 또는 사용자가 로그온할 수 있도록 허용하기 전에 등록 시 입력한 전자 메일 주소가 유효한지 확인하려고 할 수 있습니다. 어떤 경우든 CreateUserWizard 컨트롤의 DisableCreatedUser
속성을 True(기본값은 False)로 설정하여 새로 만든 사용자 계정을 승인되지 않은 것으로 표시할 수 있습니다.
참고의 다른 동작 관련 속성에는 포함 AutoGeneratePassword
및 MailDefinition
. AutoGeneratePassword
속성이 True CreateUserWizardStep
로 설정된 경우 암호 및 암호 확인 텍스트 상자가 표시되지 않습니다. 대신 새로 만든 사용자의 암호는 클래스의GeneratePassword
메서드를 사용하여 Membership
자동으로 생성됩니다. 이 메서드는 GeneratePassword
구성된 암호 강도 요구 사항을 충족하기 위해 지정된 길이의 암호를 충분한 수의 영숫자가 아닌 문자로 구성합니다.
이 MailDefinition
속성 은 계정 생성 프로세스 중에 지정된 전자 메일 주소로 전자 메일을 보내려는 경우에 유용합니다. 이 속성에는 MailDefinition
생성된 전자 메일 메시지에 대한 정보를 정의하기 위한 일련의 하위 속성이 포함되어 있습니다. 이러한 하위 속성에는 ,, Priority
IsBodyHtml
, From
CC
및 . BodyFileName
같은 Subject
옵션이 포함됩니다. 이 속성은 BodyFileName
전자 메일 메시지의 본문을 포함하는 텍스트 또는 HTML 파일을 가리킵니다. 본문은 미리 정의된 두 자리 표시자 <%UserName%>
및 <%Password%>
. 파일에 있는 BodyFileName
경우 이러한 자리 표시자는 방금 만든 사용자의 이름 및 암호로 바뀝 있습니다.
참고 항목
컨트롤의 MailDefinition
속성은 CreateUserWizard
새 계정을 만들 때 전송되는 전자 메일 메시지에 대한 세부 정보만 지정합니다. 전자 메일 메시지가 실제로 전송되는 방법(즉, SMTP 서버 또는 메일 삭제 디렉터리가 사용되는지 여부, 인증 정보 등)에 대한 세부 정보는 포함되지 않습니다. 이러한 하위 수준 세부 정보는 의 섹션에서 Web.config
정의 <system.net>
해야 합니다. 이러한 구성 설정 및 ASP.NET 2.0에서 전자 메일을 보내는 방법에 대한 자세한 내용은 SystemNetMail.com FAQ 및 내 문서인 ASP.NET 2.0에서 전자 메일 보내기를 참조하세요.
이벤트 처리기를 사용하여 CreateUserWizard의 동작 확장
CreateUserWizard 컨트롤은 워크플로 중에 많은 이벤트를 발생합니다. 예를 들어 방문자가 사용자 이름, 암호 및 기타 관련 정보를 입력하고 사용자 만들기 단추를 클릭하면 CreateUserWizard 컨트롤이 이벤트를 CreatingUser
발생합니다. 만들기 프로세스 CreateUserError
중에 문제가 발생하면 이벤트가 발생합니다. 그러나 사용자가 성공적으로 만들어 CreatedUser
지면 이벤트가 발생합니다. 발생하는 추가 CreateUserWizard 컨트롤 이벤트가 있지만 가장 게르만인 세 가지 이벤트입니다.
특정 시나리오에서는 적절한 이벤트에 대한 이벤트 처리기를 만들어 수행할 수 있는 CreateUserWizard 워크플로를 활용할 수 있습니다. 이를 설명하기 위해 사용자 이름 및 암호에 대한 사용자 지정 유효성 검사를 포함하도록 CreateUserWizard 컨트롤을 개선 RegisterUser
해 보겠습니다. 특히 사용자 이름에 선행 또는 후행 공백을 포함할 수 없고 사용자 이름이 암호의 아무 곳에도 표시되지 않도록 CreateUserWizard를 개선해 보겠습니다. 한마디로 누군가가 "Scott"과 같은 사용자 이름을 만들거나 Scott 및 Scott.1234와 같은 사용자 이름/암호 조합을 사용하는 것을 방지하려고 합니다.
이를 위해 추가 유효성 검사를 수행하기 위해 이벤트에 대한 CreatingUser
이벤트 처리기를 만듭니다. 제공된 데이터가 유효하지 않은 경우 만들기 프로세스를 취소해야 합니다. 또한 페이지에 레이블 웹 컨트롤을 추가하여 사용자 이름 또는 암호가 유효하지 않음을 설명하는 메시지를 표시해야 합니다. 먼저 CreateUserWizard 컨트롤 아래에 레이블 컨트롤을 추가하고 해당 ID
속성을 해당 속성Red
으로 InvalidUserNameOrPasswordMessage
ForeColor
설정합니다. 해당 속성을 지우고 해당 Text
EnableViewState
속성과 Visible
속성을 False로 설정합니다.
<asp:Label runat="server"" id="InvalidUserNameOrPasswordMessage"
Visible="false" ForeColor="Red" EnableViewState="false">
</asp:Label>
다음으로 CreateUserWizard 컨트롤의 CreatingUser
이벤트에 대한 이벤트 처리기를 만듭니다. 이벤트 처리기를 만들려면 디자이너에서 컨트롤을 선택한 다음 속성 창 이동합니다. 여기에서 번개 모양 아이콘을 클릭한 다음 적절한 이벤트를 두 번 클릭하여 이벤트 처리기를 만듭니다.
다음 코드를 CreatingUser
이벤트 처리기에 추가합니다.
Protected Sub RegisterUser_CreatingUser(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LoginCancelEventArgs) Handles RegisterUser.CreatingUser
Dim trimmedUserName As String = RegisterUser.UserName.Trim()
If RegisterUser.UserName.Length <> trimmedUserName.Length Then
' Show the error message
InvalidUserNameOrPasswordMessage.Text = "The username cannot contain leading or trailing spaces."
InvalidUserNameOrPasswordMessage.Visible = True
' Cancel the create user workflow
e.Cancel = True
Else
' Username is valid, make sure that the password does not contain the username
If RegisterUser.Password.IndexOf(RegisterUser.UserName, StringComparison.OrdinalIgnoreCase) >= 0 Then
' Show the error message
InvalidUserNameOrPasswordMessage.Text = "The username may not appear anywhere in the password."
InvalidUserNameOrPasswordMessage.Visible = True
' Cancel the create user workflow
e.Cancel = True
End If
End If
End Sub
CreateUserWizard 컨트롤에 입력된 사용자 이름과 암호는 각각 해당 UserName
및 Password
속성을 통해 사용할 수 있습니다. 위의 이벤트 처리기에서 이러한 속성을 사용하여 제공된 사용자 이름에 선행 또는 후행 공백이 포함되어 있는지 여부와 암호 내에서 사용자 이름을 찾을 수 있는지 여부를 확인합니다. 이러한 조건 중 하나가 충족되면 레이블에 InvalidUserNameOrPasswordMessage
오류 메시지가 표시되고 이벤트 처리기의 e.Cancel
속성이 로 True
설정됩니다. 설정된 True
경우 e.Cancel
CreateUserWizard는 워크플로를 단락하여 사용자 계정 만들기 프로세스를 효과적으로 취소합니다.
그림 15는 사용자가 선행 공백이 있는 사용자 이름을 입력하는 경우의 CreatingUserAccounts.aspx
스크린샷을 보여 줍니다.
그림 15: 선행 또는 후행 공백이 있는 사용자 이름은 허용되지 않습니다(전체 크기 이미지를 보려면 클릭).
참고 항목
추가 사용자 정보 저장 자습서에서 CreateUserWizard 컨트롤의 CreatedUser
이벤트를 사용하는 예제를 살펴보겠습니다.
요약
클래스의 CreateUser
메서드는 Membership
멤버 자격 프레임워크에 새 사용자 계정을 만듭니다. 구성된 멤버 자격 공급자에 대한 호출을 위임하여 이 작업을 수행합니다. 이 경우 메서드는 SqlMembershipProvider
CreateUser
레코드와 데이터베이스 테이블에 레코드를 aspnet_Users
aspnet_Membership
추가합니다.
5단계에서 보았듯이 새 사용자 계정을 프로그래밍 방식으로 만들 수 있지만 더 빠르고 쉬운 방법은 CreateUserWizard 컨트롤을 사용하는 것입니다. 이 컨트롤은 사용자 정보를 수집하고 멤버 자격 프레임워크에서 새 사용자를 만들기 위한 다단계 사용자 인터페이스를 렌더링합니다. 이 컨트롤은 5단계에서 검사한 것과 동일한 Membership.CreateUser
메서드를 사용하지만 컨트롤은 사용자 인터페이스, 유효성 검사 컨트롤을 만들고 코드 핥기를 작성하지 않고도 사용자 계정 생성 오류에 응답합니다.
이 시점에서 새 사용자 계정을 만들 수 있는 기능이 있습니다. 그러나 로그인 페이지는 두 번째 자습서에서 다시 지정한 하드 코딩된 자격 증명에 대해 유효성을 검사하고 있습니다. 다음 자습서에서는 멤버 자격 프레임워크에 대해 사용자가 제공한 자격 증명의 유효성을 검사하도록 업데이트 Login.aspx
합니다.
행복한 프로그래밍!
추가 정보
이 자습서에서 설명하는 항목에 대한 자세한 내용은 다음 리소스를 참조하세요.
CreateUser
기술 설명서- CreateUserWizard 컨트롤 개요
- 파일 시스템 기반 사이트 맵 공급자 만들기
- ASP.NET 2.0 마법사 컨트롤을 사용하여 단계별 사용자 인터페이스 만들기
- ASP.NET 2.0의 사이트 탐색 검사
- 마스터 페이지 및 사이트 탐색
- 대기 중인 SQL 사이트 맵 공급자
작성자 정보
여러 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술을 연구해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 샘스 티치 자신 ASP.NET 24 시간에 2.0입니다. Scott은 자신의 블로그에서 mitchell@4guysfromrolla.com 또는 블로그를 통해 연락할 수 있습니다 http://ScottOnWriting.NET.
특별 감사
이 자습서 시리즈는 많은 유용한 검토자가 검토했습니다. 이 자습서의 수석 검토자는 테레사 머피였습니다. 예정된 MSDN 문서를 검토하는 데 관심이 있으신가요? 그렇다면 선을 놓습니다 mitchell@4GuysFromRolla.com.