36

में कस्टम डेटाबेस स्कीमा के साथ सरलमेम्बरशिप मैं अपने स्वयं के डेटाबेस स्कीमा के साथ एकीकृत करने के लिए एएसपी.नेट एमवीसी 4 की सरलमेम्बरशिप एपीआई को सक्षम करना चाहता हूं। मैं अपने डेटाबेस में एक सादे और सरल तालिका इन क्षेत्रों के साथ Users कहा जाता है:एएसपी.नेट एमवीसी 4

  • ईद
  • नाम
  • पासवर्ड
  • ईमेल
  • isDeleted

मैं पहले से ही SimpleMembership एपीआई कॉन्फ़िगर किया है मेरी डेटाबेस का उपयोग करने के लिए:

WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: true); 

और मैं भी एक उपयोगकर्ता सम्मिलित कर सकते हैं:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, 
           new 
           { 
             IsDeleted = false, 
             Email = "[email protected]"     
           }); 

हालांकि, पासवर्ड क्षेत्र (या इसे हैश है) है उपयोगकर्ता तालिका (निश्चित रूप से) में डाला नहीं गया, यह webpages_Membership नामक एक और तालिका में डाला गया है जिसे InitializeDatabaseConnection कॉल के साथ बनाया गया है और इसमें बहुत सारी अनावश्यक जानकारी है, जिसकी मुझे आवश्यकता नहीं है।

इसके अलावा, मेरे पास अन्य स्वचालित रूप से बनाई गई सारणीएं हैं जिन्हें वेबपेज_ओएथमेम्बरशिप, वेबपेज_रोल्स और वेबपेज_उसर इंसोल कहते हैं जिन्हें मुझे आवश्यकता नहीं है।

मैं पहले से ही गलत पर तालिका पीढ़ी स्थापित करने के लिए कोशिश की है:

WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: false); 

लेकिन क्योंकि यह webpages_Membership तालिका नहीं मिलेगा इस मामले में CreateUserAndAccount कॉल एक अपवाद फेंक देते हैं।

ऐसा लगता है कि जब मैं SimpleMembership API का उपयोग करना चाहता हूं तो इन तालिकाओं की आवश्यकता होती है।

मेरा सवाल यह है कि: मुझे इस तरह के परिदृश्य में क्या करना चाहिए जब मुझे केवल एक साधारण Users तालिका चाहिए और कुछ भी नहीं?

क्या मुझे पूरी सदस्यता हैंडलिंग और प्रमाणीकरण तर्क (हैश कोड पीढ़ी, आदि) लिखना है?

उत्तर

11

मैंने उसी प्रश्न को उत्पाद टीम से पूछा।

सिंपल सदस्यता का डिज़ाइन लक्ष्य जितना संभव हो सके बॉक्स के बाहर काम करना था।

तो वास्तव में जहां तक ​​तालिकाओं का संबंध है, वहां कोई अनुकूलन संभव नहीं है। अनुशंसित कार्यवाही अभी भी एएसपी.NET सदस्यता (SqlMembershipProvider) का उपयोग करने के लिए है।

+0

ठीक है, धन्यवाद! शायद मैं अपने कस्टम प्रमाणीकरण तर्क लिखूंगा। – Zsolt

+33

नहीं! कृपया यह मत करो! :-) – Max

+0

एसक्यूएलएमबरशिप का उपयोग करना इतना आसान है! बस एएसपी.NET सदस्यता पर एक ट्यूटोरियल की खोज करें। यह बहुत लचीला है! – Max

2

आप एएसपी.नेट यूनिवर्सल प्रदाता के साथ ओएयूथ का उपयोग कर सकते हैं। सार्वभौमिक प्रदाता sqlmembership प्रदाताओं का नया संस्करण हैं।इन एफई CodeFirst पर आधारित होते हैं और यह भी अधिक जानकारी के http://blogs.msdn.com/b/pranav_rastogi/archive/2012/09/12/integrate-openauth-openid-with-your-existing-asp-net-application-using-universal-providers.aspx

+0

सार्वभौमिक प्रदाता SimpleMembership के साथ संगत नहीं हैं, और यह ओपी के प्रश्न को संबोधित नहीं करता है। –

3

1 के लिए मेरे निम्नलिखित पोस्ट पर अपने डेटाबेस नज़र का एक और अधिक क्लीनर स्कीमा उत्पन्न - आप EntityFramework 5. उपयोग Enable-Migrations NuGet पैकेज में साथ prefereably, माइग्रेशन सक्षम करने की आवश्यकता प्रबंधक।

2 - ले जाएँ अपने

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true); 
अपने YourMvcApp/माइग्रेशन/Configuration.cs कक्षा में अपने बीज विधि के लिए

protected override void Seed(UsersContext context) 
    { 
     WebSecurity.InitializeDatabaseConnection(
      "DefaultConnection", 
      "UserProfile", 
      "UserId", 
      "UserName", autoCreateTables: true); 

     if (!Roles.RoleExists("Administrator")) 
      Roles.CreateRole("Administrator"); 

     if (!WebSecurity.UserExists("lelong37")) 
      WebSecurity.CreateUserAndAccount(
       "lelong37", 
       "password", 
       new {Mobile = "+19725000000", IsSmsVerified = false}); 

     if (!Roles.GetRolesForUser("lelong37").Contains("Administrator")) 
      Roles.AddUsersToRoles(new[] {"lelong37"}, new[] {"Administrator"}); 
    } 

अब EF5 करने के बाद अपने UserProfile तालिका बनाने, के आरोप में किया जाएगा इसलिए आप WebSecurity को कॉल करेंगे। प्रारंभिक डाटाबेस कनेक्शन को केवल पहले से बनाए गए UserProfile तालिका के साथ SimpleMembershipProvider को पंजीकृत करने के लिए, SimpleMembershipProvider को भी बताएं कि कौन सा कॉलम UserId और UserName है। मैं यह भी उदाहरण दिखा रहा हूं कि आप उपयोगकर्ता, भूमिकाओं को जोड़ सकते हैं और दोनों को अपनी बीज विधि में कस्टम उपयोगकर्ता प्रोफाइल गुणों/फ़ील्ड के साथ जोड़ सकते हैं। उपयोगकर्ता का मोबाइल (नंबर)।

3 - अब जब आप पैकेज प्रबंधक कंसोल से अद्यतन-डेटाबेस चलाने के लिए, EF5 प्रावधान अपने सभी कस्टम गुण

अतिरिक्त संदर्भ के लिए sourcecode के साथ इस लेख का संदर्भ लें के साथ अपनी मेज करेंगे: http://blog.longle.io/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/

+2

मुझे लगता है कि यह ब्लॉगपोस्ट एक और विषय है: ईएफ कोड माइग्रेशन के साथ बीजिंग डेटा। मुझे पता है कि मैं अपनी उपयोगकर्ता तालिका (उदा। मोबाइल स्ट्रिंग) में कोई भी संपत्ति जोड़ सकता हूं, मेरा प्रश्न इसके बारे में नहीं था, लेकिन स्वचालित रूप से जेनरेट की गई सरलमेम्बरशिप तालिकाओं की पूरी स्कीमा को फिर से लिखना/अनुकूलित करना। – Zsolt

11

अनुकूलन संभव है।

आप जहां मानचित्रण (बिना DB स्कीमा और क्रम पर्यावरण आप को बदलें/अपनी आवश्यकताओं से मिलान करने के लिए स्कीमा, बयानों, आदि को बदलने के लिए इस कोड को संशोधित कर सकते हैं के बीच होता है के बाद से इस है, SimpleMembershipProviderthe aspnetwebstack project on CodePlex से के लिए स्रोत कोड प्राप्त कर सकते हैं ज्यादा सिर दर्द, IMO।)

2

यह आपके उपयोग-मामले के लिए काम नहीं कर सकता लेकिन निश्चित रूप से आप बहुत आसानी से अपने उपयोगकर्ता किसी अन्य उपयोगकर्ता तालिका बनाने के बजाय Simplemembership UserProfile तालिका करने के लिए जिम्मेदार बताते हैं

मैं का उपयोग कर की सिफारिश करेंगे जोड़ सकते हैं हैश पासवर्ड रखने के लिए मौजूदा सदस्यता तालिका, और केवल उन फ़ील्ड को अनदेखा करें जिनकी आपको आवश्यकता नहीं है। इस तरह सरल स्मृति के साथ संगतता बरकरार रखती है।

SQLMembership बॉक्स से बहुत आसान है। मैंने कुछ परियोजनाओं पर SQLMembership के लिए व्यापक अनुकूलित एक्सटेंशन किए हैं, जो कि मुश्किल नहीं था - लेकिन वापस देखकर, मेरी इच्छा है कि मैंने नहीं किया था। यह एक रखरखाव परेशानी है,

2

सदस्यता प्रदाता को विस्तारित करके आप अपना स्वयं का सदस्यता प्रदाता बना सकते हैं। अधिक जानकारी के लिए Custom MembershipProvider in .NET 4.0 देखें। इस दृष्टिकोण का उपयोग करके, आपको केवल उन्हीं विधियों को लागू करने की आवश्यकता होगी जिन्हें आपको चाहिए। इससे चीजों को और अधिक सरल रखने में मदद मिलनी चाहिए और आपको उन तालिकाओं को जोड़ने की आवश्यकता नहीं होगी जिनकी आपको आवश्यकता नहीं है।

बुनियादी कदम (से लिया जुड़ा हुआ तो जवाब) कर रहे हैं:

  1. एक नया वर्ग फ़ाइल बनाएँ (यदि आप एक बहु-स्तरीय प्रणाली का उपयोग नहीं कर रहे हैं, अपने प्रोजेक्ट की मॉडल फ़ोल्डर में) का यह कॉल MyMembershipProvider.cs
  2. System.Web.Security से उस कक्षा को ले जाएं।दोनों SimpleMembership तालिकाओं के साथ अपने कस्टम उपयोगकर्ता तालिका MembershipProvider
  3. स्वतः जरूरत विधियों (अवधि + इनहेरिट कक्षा में अंतरिक्ष)
0

आप इस्तेमाल कर सकते हैं पैदा करते हैं। इस विधि ने अतीत में मेरे लिए बहुत अच्छा काम किया है।

उदाहरण के लिए, खाता नियंत्रक में अपनी रजिस्टर विधि में, आप उपयोगकर्ता को अपनी उपयोगकर्ता तालिका में जोड़कर एक नया उपयोगकर्ता पंजीकृत करेंगे। फिर उपयोगकर्ता को उपयोगकर्ता तालिका में जोड़े गए उपयोगकर्ता के आईडी का उपयोग करके इस उपयोगकर्ता को SimpleMembership UserProfile तालिका में जोड़ें।

using (var context = new MyDatabaseEntities()) 
{ 
    User newUser = new User(){ 
     Name = model.Name, 
     Email = model.Email, 
     IsDeleted = false 
    } 

    // Add the user to your custom Users table 
    context.Users.Add(newUser); 
    context.SaveChanges(); 

    // Add this user to the SimpleMembership table using the same Id as the custom Users table 
    WebSecurity.CreateUserAndAccount(newUser.Id.ToString(), model.Password); 

    // Log the user in 
    WebSecurity.Login(newUser.Id.ToString(), model.Password); 
} 
संबंधित मुद्दे