2009-10-31 25 views
5

मैं अपने एएसपी.नेट एमवीसी [प्राधिकरण()] विशेषता के साथ अपने कस्टम सदस्यता प्रदाता को कैसे जोड़ूं? मैंने कस्टम सदस्यता प्रदाता बनाने के तरीके के बारे में कई ट्यूटोरियल के माध्यम से विस्फोट किया है, लेकिन मुझे यह जानकारी मिली है कि इसे किसी एप्लिकेशन पर कैसे लगाया जाए, नियमित एएसपी.NET वेबफॉर्म एप्लिकेशन के आसपास घूमता प्रतीत होता है जो एक टुकड़ा प्रतीत होता है केक कामैं अपने एएसपी.नेट एमवीसी एप्लिकेशन में एक कस्टम सदस्यता प्रदाता कैसे संलग्न कर सकता हूं?

मैं "जादू" की मात्रा के साथ अनस्टक आ रहा हूं जो कि एएसपी.नेट एमवीसी में होता है जो कि बहुत अच्छा है, लेकिन मुझे वेबफॉर्म तरीके से सामान प्लग करने के लिए उपयोग किया जाता है, इसलिए यह "यह काम करता है" पद्धति है मेरे लिए एक दिमाग बेंडर का थोड़ा सा। मुझे कैसे पता चलेगा कि मुझे भारी उठाने के लिए कब माना जाता है या मुझे बस जादू पर होने पर भरोसा करना चाहिए?

मैं अपने प्रदाता को एमवीसी ऐप में कहां से जोड़ूं? क्या मैं यह मानने में सही हूं कि इसे [प्राधिकृत()] विशेषता के माध्यम से लागू किया जाता है जब मैं इसे जोड़ता हूं?

उत्तर

6

उम्मीद है कि मैं अन्य उत्तरों पर कुछ अतिरिक्त स्पष्टता जोड़ सकता हूं क्योंकि वे वास्तव में यह नहीं बताते कि क्या हो रहा है जो आपके भ्रम की सहायता नहीं करेगा।

सबसे पहले, अपने कस्टम प्रदाता को लागू जो बातें आप पहले से ही किया है, तो मैं बस एक छोटे से कोड स्निपेट फेंक देंगे और किसी भी आगे विस्तार यहाँ पर नहीं जाऊंगा की आवाज से:

using System.Web.Security; 

public class MyCustomMembershipProvider : MembershipProvider 
{ 
    public override bool ValidateUser(string username, string password) 
    { 
     if (username.Equals("BenAlabaster") && password.Equals("Elephant")) 
      return true; 

     return false; 
    } 

    /* Override all the other methods required to extend MembershipProvider */   
} 

<membership defaultProvider="MyCustomMembershipProvider">  
    <providers>   
     <clear />   
     <add name="MyCustomMembershipProvider" 
      type="MyNamespace.MyCustomMembershipProvider" 
      enablePasswordRetrieval="false" 
      enablePasswordReset="true"   
      requiresQuestionAndAnswer="false"   
      requiresUniqueEmail="true"   
      passwordFormat="Hashed"   
      maxInvalidPasswordAttempts="10"   
      minRequiredPasswordLength="6"   
      minRequiredNonalphanumericCharacters="0"   
      passwordAttemptWindow="10"   
      passwordStrengthRegularExpression=""   
      applicationName="/" />  
    </providers>  
</membership> 

अगले बिट मुझे लगता है कि आप overthinking कर रहे हैं, वास्तविक टाई-इन के लिए अपने वेब आवेदन:

तो फिर तुम विशेषताओं है कि आधार MembershipProvider कॉन्फ़िगर पॉप्युलेट करने के लिए सुनिश्चित करने के अपने web.config में अपने प्रदाता कॉन्फ़िगर । जबकि वेबफॉर्म ऐप में आपको अपने लिए बाकी को कोड करना होगा - एमवीसी फ्रेमवर्क आपके लिए बाकी करता है - आपको बस अपनी क्रिया विधि में [अधिकृत] विशेषता जोड़ना है और ढांचा यह देखने के लिए जांच करेगा कि क्या आप लॉग इन किया गया है, और यदि आपको लॉगिन पेज पर रीडायरेक्ट नहीं किया गया है। क्योंकि है कि क्या web.config में कॉन्फ़िगर किया गया है और में अपना उपयोगकर्ता प्रवेश करेंगे प्रवेश पृष्ठ अपने कस्टम प्रदाता मिलेगा आप उपयोगकर्ता वस्तु को संदर्भित करके अपने नियंत्रक से उपयोगकर्ता के प्रवेश के बारे में जानकारी का उपयोग कर सकते हैं:।

public class WhateverController : Controller 
{ 
    [Authorize] 
    public ActionResult WhateverAction() 
    { 
     ViewData["LoggedInAs"] = string.Format("You are logged in as {0}.", User.Identity.Name); 
     Return View(); 
    } 
} 

इसलिए इस कार्रवाई के लिए आवश्यक है कि उपयोगकर्ता लॉग इन हो और पेज पर प्रदर्शित होने वाले जो भी/जो भीएक्शन.एएसपीएक्स दृश्य को उपयोगकर्ता जानकारी प्रस्तुत करता हो।

+0

ठीक है, यह समझ में आता है - इसे साफ़ करने के लिए धन्यवाद। मैं बस दो और दो एक साथ नहीं डाल रहा था। मैं अभी भी उस वेबफॉर्म फ्रेम में फंस गया हूं और यह पता नहीं लगाया गया है कि एमवीसी मेरे लिए क्या करता है और जब मुझे इसे अपने लिए संभालना पड़ता है। – BobTheBuilder

0

आपने इस कस्टम सदस्यता में कितना परिवर्तन किया? जैसा आपने टेबल नामों को बदल दिया था? क्या आप उपयोगकर्ताओं को लॉग इन कर सकते हैं और सामान? क्या आपकी कस्टम सदस्यता काम कर रही है?

यदि आपने चारों ओर बहुत सारी चीजें बदल दी हैं जैसे कि आपने रोल टेबल का नाम बदल दिया है या उस तरह की चीजें हैं तो आपको एथ्रोइज़ टैग को ओवरराइड करना होगा।

हालांकि यदि आपकी कस्टम सदस्यता काम नहीं कर रही है तो शायद आपने इसे सही कॉन्फ़िगर नहीं किया है और कॉन्फ़िगर करना वेबफॉर्म के समान है। आपको बस अपना वेब कॉन्फिगर सेट करना होगा।

</authentication> 
    <membership> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ConnectionString" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="true" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="10" 
      minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression="" 
      applicationName="/" /> 
     </providers> 
    </membership> 
    <profile> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ConnectionString" applicationName="/" /> 
     </providers> 
    </profile> 
    <roleManager enabled="true"> 
     <providers> 
     <clear /> 
     <add connectionStringName="ConnectionString" 
      applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     <add applicationName="/" name="AspNetWindowsTokenRoleProvider" 
      type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
+0

जब आप कहते हैं - "हमने चारों ओर क्या बदल दिया और सामान", हमने कुछ भी नहीं बदला, हम मौजूदा उपयोगकर्ता डेटाबेस का उपयोग कर रहे हैं, न कि एएसपी.नेट एमवीसी विज़ार्ड आपके लिए सेट अप करता है .. और ईमानदार होने के लिए, हमारे पास ट्यूटोरियल का उपयोग करने का कोई इरादा नहीं है, यह हमारी आवश्यकताओं के लिए आवश्यक से कहीं अधिक जटिल है और हमारे व्यापार मॉडल की आवश्यकताओं को पूरा नहीं करता है। तो हमने एक सदस्यता प्रदाता लिखा है ... जिस चीज के बारे में मैं अनजान हूं, यह है कि यह मेरे कस्टम प्रदाता को कैसे लगाता है जिसे मैंने web.config में अपने वेब एप्लिकेशन के कोडबेस में निर्दिष्ट किया है? – BobTheBuilder

+0

अच्छी तरह से मैंने जो कुछ भी दिया है वह एक कस्टम प्रदाता के साथ एक कस्टम डेटाबेस स्थापित करने के लिए उपयोग किया जाता है। क्या आप अपनी उपयोग की जाने वाली टेबलों को सूचीबद्ध कर सकते हैं जैसे आप aspnet_UserInRoles का उपयोग कर रहे हैं? aspnet_user और कोई भी तालिका जो एस्पनेट के साथ उपसर्ग है? – chobo2

1

मेरे कस्टम सदस्यता प्रदाता web.config में संदर्भित है:

<membership defaultProvider="MyMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="MyMembershipProvider" type="Namespace.MyMembershipProvider, Namespace" connectionStringName="connstring" [...] /> 
    </providers> 
</membership> 

तो बस स्थिर सदस्यता वर्ग का उपयोग करें।

+0

कूल - वेब.कॉन्फिग में गुणकों को निर्दिष्ट करने के लिए आपको क्या रोकना है, और मेरे वेब एप्लिकेशन में यह कहां से कार्य करता है? – BobTheBuilder

+0

आप वास्तव में कई सदस्यता प्रदाताओं को निर्दिष्ट करने में सक्षम हैं। यही कारण है कि आपको डिफ़ॉल्ट प्रदाता निर्दिष्ट करना है। मुझे लगता है कि कई प्रदाताओं की उपयोगिता केवल जटिल प्राधिकरण तंत्र में देखी जाती है। लेकिन कोड में प्रदाताओं को सूची में लाने के लिए, आप सिस्टम.Web.Security.Membership.Providers प्रॉपर्टी का उपयोग करते हैं जो web.cofig में निर्दिष्ट सदस्यता प्रदाताओं का संग्रह देता है। ज़ोवेन्स के रूप में – zowens

+0

। असल में, आप सामान्य रूप से सदस्यता प्रदाता mp = new MyMembershipProvider() द्वारा अपने स्वयं के ज्ञात प्रदाता को तुरंत चालू कर सकते हैं; या सदस्यता द्वारा लौटाई गई सूची से इसे प्राप्त करके। प्रदाता – twk

संबंधित मुद्दे