2010-07-26 43 views
0

我有一个MVC 2项目我在App_Data目录中有我自己的* .mdf文件。 * .mdf文件包含我的普通表,但不包含用户表。ASP.NET MVC 2会员用户表mdf文件

是否可以将用户表添加到我的* .mdf文件并使用它而不是简单的注册表格? (如果是这样?怎么会这样做)

因为我不知道该怎么做上面这些事情,我搜索,只找到步骤中的成员身份加入构建我的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文件,但我不知道如何做一个自己的用户表注册/登录/注销/会员/等...的东西。 因此,我尝试将Membership添加到我自己的* .mdf文件中,以便所有内容都可以放在那个* .mdf文件中,但这也给我带来了问题。

也许这个信息是重要的: 在未来,我希望它有可能让用户注册并通过Hotmail,Gmail,OpenId登录,我应该需要更多的字段,如网站,昵称,头像等...其他比现在的基本登记表格。还需要在网站上显示用户的个人资料页面。

有人能帮我吗?

PS:我没有在ASP.NET中的成员身份的经验:s

回答

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”中, 抽象类应该是这样的:

 
    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); 
} 

在AccountModel.cs你可以找到

实现抽象方法
 
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:

 
    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标记:

 
Html.LabelFor(m => m.PasswordQuestion) 

最重要的是,你需要改变从_provider只读到私人

 
public class AccountMembershipService : IMembershipService 
    { 
     private MembershipProvider _provider; 
} 

您可以通过此进度添加验证方法。