2011-05-03 91 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> 

我希望這會有所幫助。

相關問題