2014-07-14 2 views
1

WebForms 프로젝트에서 멤버쉽 공급자 (Precursor to Identity)를 사용하고 있습니다. 나는 사용자가 바로 상자에서 일하게 할 수 있었다. 나는 약간 사용자를 등록하고 ASP.Net는 나의 데이타베이스에있는 뒤에 오는 테이블을 창조했다.ASP.Net 멤버십 (Visual Studio 2012 및 Web Forms)

dbo.Memberships 
dbo.Profiles 
dbo.Rules 
dbo.Users 
dbo.UsersInRoles 
dbo.UsersOpenAuthAccounts 
dbo.UsersOpenAuthData 

회원 자격에 필요한 전체 테이블 그룹입니다. 내 사이트에 대한 액세스를 로그인 한 사용자에게 성공적으로 제한했습니다. 나는 역할을 만들었고 특정 역할을 가진 사용자로 제한된 페이지 자체에 정의 된 사이트의 섹션을 만들기 시작했습니다.

문제는 사용자를 위해 추가 필드를 추가하는 것입니다.

지금까지 web.config 파일의 프로필 섹션에 추가 정보를 추가하는 방법을 살펴 보았습니다.

<authentication mode="Forms"> 
    <forms loginUrl="/Account/Login.aspx" timeout="2880" defaultUrl="~/Projects.aspx" /> 
</authentication> 
<authorization> 
    <deny users="?" /> 
    <deny roles="Admin" /> 
</authorization> 
<profile defaultProvider="SqlProvider"> 
    <providers > 
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
    <properties> 
    <add name="fname" /> 
    <add name="lname" /> 
    <add name="skype" /> 
    <add name="phone" /> 
    </properties> 
</profile> 
<membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
    </providers> 
</membership> 
<roleManager enabled="true" defaultProvider="DefaultRoleProvider"> 
    <providers> 
    <add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </providers> 
</roleManager> 
장소에서 그와 그래서

내가 추가 사용자 관련 분야 시도하고 추가하기 위해 다음과 같은 추가 한 것을 주요 변화 :

<profile defaultProvider="SqlProvider"> 
    <providers > 
    ... 
    </providers> 
    <properties> 
    <add name="fname" /> 
    <add name="lname" /> 
    <add name="skype" /> 
    <add name="phone" /> 
    </properties> 
</profile> 
을 나는 현재 내 Web.config의 정의 다음 한

나는 또한 계정/Register.aspx 페이지를 업데이트하고 지금은 다음과 같습니다 : 나는 ADDI을 추가 한

<%@ Page Title="Register" Language="C#" MasterPageFile="~/DashUser.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="ArchiTrak.Account.Register" %> 

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="BodyContent"> 

     <h2 class="form-signin-heading raleway"><%: Title %>.</h2> 

<asp:CreateUserWizard runat="server" ID="RegisterUser" ViewStateMode="Disabled" OnCreatedUser="RegisterUser_CreatedUser"> 
    <LayoutTemplate> 
     <asp:PlaceHolder runat="server" ID="wizardStepPlaceholder" /> 
     <asp:PlaceHolder runat="server" ID="navigationPlaceholder" /> 
    </LayoutTemplate> 
    <WizardSteps> 
     <asp:CreateUserWizardStep runat="server" ID="RegisterUserWizardStep"> 
      <ContentTemplate> 

      <div class="container"> 

       <div class="row"> 
        <div class="col-md-6"> 
        <p class="raleway"> 
         Passwords are required to be a minimum of <%: Membership.MinRequiredPasswordLength %> characters in length. 
        </p> 

        <p class="validation-summary-errors"> 
         <asp:Literal runat="server" ID="ErrorMessage" /> 
        </p> 

        <asp:TextBox class="form-control" runat="server" ID="UserName" placeholder="User Name"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" 
         CssClass="field-validation-error" ErrorMessage="The user name field is required." /> 

        <asp:TextBox class="form-control" runat="server" ID="fname" placeholder="First Name"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="fname" 
         CssClass="field-validation-error" ErrorMessage="The First Name field is required." /> 

        <asp:TextBox class="form-control" runat="server" ID="lname" placeholder="Last Name"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="lname" 
         CssClass="field-validation-error" ErrorMessage="The Last Name field is required." /> 

        <asp:TextBox class="form-control" runat="server" ID="phone" placeholder="Phone Number"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="phone" 
         CssClass="field-validation-error" ErrorMessage="The Phone field is required." /> 

        <asp:TextBox class="form-control" runat="server" ID="skype" placeholder="Skype Account"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="skype" 
         CssClass="field-validation-error" ErrorMessage="The Skype field is required." /> 


        <asp:TextBox class="form-control" runat="server" ID="Email" TextMode="Email" placeholder="Email"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="Email" 
         CssClass="field-validation-error" ErrorMessage="The email address field is required." /> 


        <asp:TextBox class="form-control" runat="server" ID="Password" TextMode="Password" placeholder="Password"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" 
         CssClass="field-validation-error" ErrorMessage="The password field is required."/> 


        <asp:TextBox class="form-control" runat="server" ID="ConfirmPassword" TextMode="Password" placeholder="Password"/> 
        <asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword" 
          CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The confirm password field is required." /> 
        <asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword" 
            CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." /> 

        <br /> 
        <asp:Button runat="server" CommandName="MoveNext" Text="Register" CssClass="btn btn-lg btn-primary btn-block"/> 
        </div> 

       </div> 
      </div> 

      </ContentTemplate> 
      <CustomNavigationTemplate /> 
     </asp:CreateUserWizardStep> 
    </WizardSteps> 
</asp:CreateUserWizard> 
</asp:Content> 

첫 번째 & 성, 스카이프 및 전화 번호를 수집 할 수 있습니다. 그러나 새 사용자에 대한 등록을 제출할 때 데이터베이스의 프로필 테이블에 아무 것도 나타나지 않습니다.

은 Register.aspx.cs은 다음과 같습니다 : I 추가 정보를 추가하는 프로필 방법에 대해 읽은 내용에서

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Microsoft.AspNet.Membership.OpenAuth; 

namespace ArchiTrak.Account 
{ 
    public partial class Register : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"]; 
     } 

     protected void RegisterUser_CreatedUser(object sender, EventArgs e) 
     { 
      FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false); 

      string continueUrl = RegisterUser.ContinueDestinationPageUrl; 
      if (!OpenAuth.IsLocalUrl(continueUrl)) 
      { 
       continueUrl = "~/Projects.aspx"; 
      } 
      Response.Redirect(continueUrl); 
     } 
    } 
} 

은 그냥 내가 위에서 수행 한 것과 유사한 최소한의 수정을 일이다. 나는 무엇인가 놓친다? 웹 양식을 사용하여 단계별로 진행되는 훌륭한 자습서가 있습니까? 정보 및 자습서를 검색했습니다. 그래서 역할에 대한 Microsoft 링크가 발견되었습니다. & 프로필. 그게 내가 이걸 얻은 방법이야. 나는 Identity에 익숙하지만이 프로젝트에서는 사용할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 올바른 방향으로 걷어차기만하면됩니다.

+0

프로필은 웹 사이트 프로젝트 템플릿에서만 사용할 수 있습니다. 사용자 정의 프로파일을 구현해야하지만 이미 많은 링크가 있습니다. :) – IrishChieftain

+0

그건별로 도움이되지 않습니다. 웹 사이트 프로젝트 템플릿 만? 그게 맞지 않을거야. –

+0

기본 WebForms 템플릿을 사용하고 있습니다. 너 무슨 뜻인지 모르겠다. 내 응용 프로그램이 역할 및 등록 작업 중입니다. 왜 프로필을 사용할 수 없습니까? –

답변

2

IrishChieftain이 말했듯이 웹 응용 프로그램 프로젝트의 프로필에 문제가있었습니다.

많은 사람들이 XML 파일로 저장 했으므로 프로필을 좋아하지 않으므로 쉽게 쿼리 할 수 ​​없습니다.

대신 사용자 정의 프로필을 저장하기 위해 별도의 테이블을 생성합니다. TableProfileProvider을 볼 수도 있습니다. 예를 들어

,

enter image description here

새로운 응용 프로그램을 개발하는 경우, 사용자 테이블에 사용자 정의 열 수 있습니다 ASP.Net Identity 2보고 할 수 있습니다.

+0

죄송합니다. 질문에 대한 정확한 표시. 우리는이 프로젝트에 틈새가 생겨서 방금 돌아 왔습니다. 귀하의 답변에 감사 드리며이 조언을 듣고 매우 유사한 것을했습니다. –