2010-07-26 2 views
0

У меня есть проект MVC 2, где у меня есть свой файл * .mdf в каталоге App_Data. Файл * .mdf содержит мои обычные таблицы, но не таблицу пользователей.ASP.NET MVC 2 Member users users table mdf file

Можно ли добавить таблицу пользователей в мой файл * .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 и пошел в LogOn и зарегистрировал аккаунт, но застрял там:

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, но я не знаю, как выполнять регистрацию/вход/выход/членство/и т. д. вещи со своей собственной таблицей пользователей. Итак, я попробовал добавить членство в свой файл * .mdf, чтобы все было в одном файле * .mdf, но это также дает мне проблемы.

Возможно, эта информация важна: В будущем я хочу, чтобы пользователи могли зарегистрироваться и войти в систему через Hotmail, Gmail, OpenId, и мне нужно больше полей, таких как сайт, псевдоним, аватар и т. Д. ... чем основная форма регистра. Также вам нужно будет показать страницу профиля с пользователя на веб-сайте.

Может ли кто-нибудь помочь мне?

PS: У меня нет опыта работы с членством в ASP.NET: s

ответ

0

я столкнулся с той же проблемой. Вы можете настроить таблицу регистров пользователей, делая эти:

Прежде всего, настроить службу sqlmemberprovider в web.config:.

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

добавить столько, сколько параметров, как вам нравится.

Редактировать модель регистра в RegisterModel в AccountModel.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 от readonly to private

 
public class AccountMembershipService : IMembershipService 
    { 
     private MembershipProvider _provider; 
} 

С помощью этого шага вы можете добавить свои методы проверки.