2011-05-03 89 views
0

我想为我的asp.net mvc应用程序创建自定义成员资格提供程序,但缺省CreateUser()方法中的参数数量并不是我想要的。因为我的用户表是不同的,我想传递我自己的参数。下面是我用UserCreate()方法的代码:实现自定义成员资格提供程序,用户创建问题

public override MembershipUser CreateUser(string username,string family,string personcode, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) 
    { 
     // 
    } 

这里的错误,我得到:

错误2 MyMemberShipProvider.CreateUser(字符串,字符串,字符串,字符串,字符串,字符串,字符串,bool,object,out System.Web.Security.MembershipCreateStatus)':找不到合适的方法覆盖

+0

可能的重复:http://stackoverflow.com/questions/5838371/asp-net-mvc-custom-membership-provider-how-to-overload-createuser – Damb 2011-05-03 12:21:43

+0

你的意思是我可以通过继承MemberShipRpovider来实现我自己的MemberShipProvider并重写createuser,就像你发送的链接中的内容一样? – 2011-05-03 12:35:26

+0

是的,这就是为什么我指出了一个陌生的问题,所以你可以看到他们是如何解决它的。 – Damb 2011-05-03 12:47:36

回答

0

一个好方法是同时使用成员资格提供程序和配置文件提供程序。

成员资格提供将管理用户,密码验证的创建,跟踪谁,当日志到您的应用程序等

配置文件提供者,您可以管理用户的多个属性。

所以,你需要做到以下几点:

  1. 实现自己的会员供应商。 见msdn.microsoft.com/en-us/library/f1kyba5e.aspx或msdn.microsoft.com/en-us/library/44w5aswa.aspx

  2. 实现自己的个人资料提供者(或使用现有的)。
    看到这里msdn.microsoft.com/en-us/library/0580x1f5.aspx或msdn.microsoft.com/en-us/library/ta63b872.aspx

  3. 实现一个ProfileCommon类定义你想要的属性用于您的用户。 你的配置文件提供者应该知道如何处理ProfileCommon类。

对于一个例子的ProfileCommon我实现我的自定义的MongoDB ASPNET提供商如下:github.com/agarcian/MongoDBASPNetProviders/blob/master/ASPNETProvidersForMongoDB/ProfileCommon.cs

  1. 配置WebConfig部分,以定义您的自定义实现。 (请参阅下面的示例)

下面的示例是我为MongoDB开发的自定义成员资格,角色和配置文件提供程序的一部分。 请参阅https://github.com/agarcian/MongoDBASPNetProviders

下面是我在我的应用程序中使用我的自定义成员资格提供程序的配置。

<membership defaultProvider="MongoDBProvider" userIsOnlineTimeWindow="15"> 
    <providers> 
    <clear /> 
    <add 
     name="MongoDBProvider" 
     type="ASPNetProvidersForMongoDB.MongoDBMembershipProvider, ASPNetProvidersForMongoDB" 
     connectionStringName="MongoProvidersDBConnStr" 
     enablePasswordRetrieval="true" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="false" 
     writeExceptionsToEventLog="true" 
     mongoProviderDatabaseName ="aspnetproviderdb" 
     mongoProviderUsersCollectionName="Users" 
     applicationName="WebUI4" 
     /> 



    </providers> 
</membership> 

<roleManager defaultProvider="MongoDBProvider" enabled="true"> 
    <providers> 
    <clear /> 
    <add applicationName="WebUI4" 
     name="MongoDBProvider" 
     type="ASPNetProvidersForMongoDB.MongoDBRolesProvider, ASPNetProvidersForMongoDB" 
     connectionStringName="MongoProvidersDBConnStr" 
     writeExceptionsToEventLog="true" 
     mongoProviderDatabaseName ="aspnetproviderdb" 
     mongoProviderUsersCollectionName="Roles" 
     /> 
    </providers> 
</roleManager> 

<profile defaultProvider="MongoDBProvider" inherits="MyCompany.Security.Profile.ProfileCommon"> 
    <providers> 
    <add 
     applicationName="WebUI4" 
     name="MongoDBProvider" 
     type="ASPNetProvidersForMongoDB.MongoDBProfileProvider, ASPNetProvidersForMongoDB" 
     connectionStringName="MongoProvidersDBConnStr" 
     writeExceptionsToEventLog="true" 
     mongoProviderDatabaseName ="aspnetproviderdb" 
     mongoProviderUsersCollectionName="Profiles" /> 
    </providers> 
</profile> 

我希望这会有所帮助。

相关问题