2010-07-26 2 views
0

나는 MVC 2 프로젝트이 있는데 AppdData 디렉토리에 내 자신의 * .mdf 파일이 있습니다. * .mdf 파일에는 일반 테이블이 있지만 사용자 테이블은 들어 있지 않습니다.ASP.NET MVC 2 회원 사용자 테이블 mdf 파일

내 * .mdf 파일에 Users 테이블을 추가하고 간단한 등록 양식 대신 작업 할 수 있습니까? (만약 그렇다면 어떻게 할 수 있습니까?)

위의 작업을 수행하는 방법을 모르므로 필자는 검색하여 회원 정보를 내 mdf 파일에 추가하는 단계를 발견하고 시도했습니다.

나는이 내 *의의 .mdf 파일에 회원 정상적인 빌드를 추가하려고 :

aspnet_regsql.exe -C CONSTRINGHERE -d PATHTOMDFFILEHERE -A all 

나는이 내 Web.config 파일을 변경 :

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="CompanyDBEntities" connectionString="metadata=res://*/Models.CompanyDB.csdl|res://*/Models.CompanyDB.ssdl|res://*/Models.CompanyDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CompanyData.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
    </authentication> 
    <membership defaultProvider="CompanyDBSqlProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
     <clear /> 
     <add name="CompanyDBSqlProvider" 
      type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="CompanyDBEntities" 
      applicationName="/" 
      enablePasswordRetrieval="false" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="true" 
      requiresUniqueEmail="true" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="5" 
      minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression="" 
      /> 

     </providers> 
    </membership> 
    <profile> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" 
      connectionStringName="CompanyDBEntities" applicationName="/" /> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" 
      connectionStringName="CompanyDBEntities" applicationName="/" /> 
     <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

내가 무엇을 수정하지 않았다 . 나는 AccountController 또는 뭔가를 변경하지 않았다. 나는 사례 내 MVC 2 응용 프로그램을 실행하고 로그온 가서 계정을 등록하지만, 거기에 붙어있어 :

Account creation was unsuccessful. Please correct the errors and try again. 

    * The password retrieval answer provided is invalid. Please check the value and try again. 

요약 : 나는 그것의 사용자 테이블이 더 좋을 것이라고 생각

내 * .mdf 파일을하지만 어떻게 등록/로그인/로그 아웃/멤버십/etc ... 자신의 사용자 테이블과 함께 일을 해야할지 모르겠다. 그래서 모든 것을 * .mdf 파일에 담을 수 있도록 멤버쉽을 내 * .mdf 파일에 추가하려고 시도했지만 문제가 있습니다.

아마도이 정보는 중요합니다. 앞으로 사용자가 Hotmail, Gmail, OpenId를 통해 등록하고 로그인 할 수있게하려면 웹 사이트, 닉네임, 아바타 등의 필드가 더 필요합니다. 기타 지금 기본 등록 양식보다. 또한 웹 사이트의 사용자 프로필 페이지를 표시해야합니다.

아무도 도와 줄 수 있습니까?

PS : 나는 ASP.NET에서 회원 경험이없는 :의

답변

0

저도 같은 문제가 발생했습니다. 모두의

최초의 Web.config에서 sqlmemberprovider 서비스 구성 : 당신은이 작업을 수행하여 사용자 레지스터 테이블을 사용자 정의 할 수 있습니다.

 
    ' add connectionStringName="PhotoSocialMemberService" applicationName="PhotoSocial" 
      minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" 
      requiresQuestionAndAnswer="true" 
      name="PhotoSocailMember" type="System.Web.Security.SqlMembershipProvider" /' 

편집 AccountModel.cs을 방법을 찾아 "createuser가" 의 추상 클래스는 다음과 같이해야 다음 AccountModel.cs에

 
    public abstract class MembershipProvider : ProviderBase 
    {... 
    public abstract MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status); 
} 

당신이

에서 추상 메소드의 구현을 찾을 수 있습니다
 
public interface IMembershipService 
{ 
    int MinPasswordLength { get; } 

    bool ValidateUser(string userName, string password); 
    MembershipCreateStatus CreateUser(string userName, string password, string email, string passwordquestion, string passwordanswer); 
    bool ChangePassword(string userName, string oldPassword, string newPassword); 
} 

원하는대로

 
public MembershipCreateStatus CreateUser(string userName, string password, string email, string passwordquestion, string passwordanswer) 
     { 
      if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName"); 
      if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password"); 
      if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email"); 

      MembershipCreateStatus status; 
      _provider.CreateUser(userName, password, email, passwordquestion, passwordanswer, true, null, out status); 
      return status; 
     } 

매개 변수만큼 추가에.

AccountModel의 RegisterModel에서 레지스터 모델을 편집하십시오.CS, 당신은 registerModel에 투입 할 문자열을 추가 :

 
Html.LabelFor(m => m.PasswordQuestion) 

, 당신의 _provider을 변경에서 가장 중요한 역할을해야

 
    public class RegisterModel 
    {[Required] 
       [DisplayName("User name")] 
       public string UserName { get; set; } 

       [Required] 
       [DataType(DataType.EmailAddress)] 
       [DisplayName("Email address")] 
       public string Email { get; set; } 

       [Required] 
       [ValidatePasswordLength] 
       [DataType(DataType.Password)] 
       [DisplayName("Password")] 
       public string Password { get; set; } 

       [Required] 
       [DataType(DataType.Password)] 
       [DisplayName("Confirm password")] 
       public string ConfirmPassword { get; set; } 

       [Required] 
       [DisplayName("Password security question")] 
       public string PasswordQuestion { get; set; } 

       [Required] 
       [DataType(DataType.Password)] 
       [DisplayName("Password security answer")] 
       public string PasswordAnswer { get; set; } 

      } 

마지막으로, Register.aspx 페이지를 다시 작성, HTML 태그를 추가 비공개로 읽기

 
public class AccountMembershipService : IMembershipService 
    { 
     private MembershipProvider _provider; 
} 

이 진행 과정을 통해 유효성 검사 방법을 추가 할 수 있습니다.