2009-01-25 7 views
6

मैं asp.net वेबसाइट परियोजना है कि पृष्ठों में से कुछ प्रमाणीकरण की आवश्यकता के साथ काम कर रहा हूँ। मैं एएसपीनेट सदस्यता का उपयोग कर रहा हूँ।एएसपीनेट में कुछ पेजों को लॉगिन करने के लिए सबसे अच्छा तरीका क्या है?

मैं कुछ जवाब पढ़ें। जैसे उन सभी पृष्ठों को फ़ोल्डर में बनाएं और आंतरिक वेब.कॉन्फिग बनाएं जो विशेषाधिकार का वर्णन करे। यह समस्या का समाधान करने का एक तरीका है लेकिन मुझे ऐसे तरीके की आवश्यकता है जो अधिक फिक्स करने योग्य और प्रभावी हों।

+0

क्या आप 'अधिक सुधारी जा सकने वाली और प्रभावी' से क्या मतलब है? ऊपर उल्लिखित विधि के साथ क्या गलत है? –

+1

मैंने वेब का उपयोग करते हुए नीचे जवाब दिया जब मैंने "लचीला" का अर्थ लिया।यदि आप इस तरह की चीज गतिशील पृष्ठों के साथ कर रहे हैं, या किसी पृष्ठ को उदाहरण के लिए पोस्ट की गई तारीख के आधार पर कॉन्फ़िग दर्द हो सकता है (यानी संग्रह पृष्ठों तक पहुंच प्रतिबंधित करना) –

उत्तर

20

यदि आप web.config (ओं) में इसे हार्ड कोड नहीं करना चाहते हैं तो आपको "बेस पेज" प्रकार नियंत्रण को लागू करने की आवश्यकता होगी।

आपकी बेस पेज क्लास System.Web.UI.Page से प्राप्त होनी चाहिए, और उस विधि की आवश्यकता होगी जिसे आप "उपयोगकर्ता लॉग इन होना चाहिए" या "उपयोगकर्ता भूमिका में होना चाहिए", और यदि उपयोगकर्ता उस भूमिका में नहीं है, लॉगिन पेज पर रीडायरेक्ट करें (आप इसे FormsAuthentication.LoginUrl पर कॉल करके प्राप्त कर सकते हैं)।

आपका वास्तविक पृष्ठों इस वर्ग के बजाय सीधे System.Web.UI.Page से विरासत चाहिए। फिर, Init की तरह कुछ में, या Page_Load के शीर्ष पर, फोन

base.UserMustBeLoggedIn(); 

या

// Replace "AccessRole" with the name of your role 
base.UserMustBeInRole("AccessRole"); 

और आधार पेज इस संभालने दें।

यदि आपके पास डेटाबेस में संग्रहीत एक्सेस अधिकार हैं, तो आप सभी प्रसंस्करण को मूल पृष्ठ पर ले जा सकते हैं, और पृष्ठ जीवन चक्र में उपयुक्त स्थान पर, अपनी डेटाबेस तालिका के विरुद्ध वर्तमान URL को चेक करें, जांचें आवश्यकताओं के खिलाफ उपयोगकर्ता भूमिका/प्रमाणीकरण और आवश्यकतानुसार पुनर्निर्देशित करें।


ध्यान दें कि यदि आप ऐसा तरह वेब config में पेज स्तर की सुरक्षा बना सकते हैं:

<configuration> 
    <location path="LockedPage.aspx"> 
    <system.web> 
     <authorization> 
     <!-- Deny access to anonymous users --> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

अधिक जानकारी MSDN पर उपलब्ध है: The Location Element और The Authorization Element

3

आप इस कोड, मास्टर पेज लोड घटना में जोड़ने एक संपत्ति की कोशिश, इस कोड लिख सकते हैं

सार्वजनिक bool m_bLoginRequired सच =;

public bool IsLoginRequired 
{ 
    get { return m_bLoginRequired; } 
    set { m_bLoginRequired = value; } 
} 



try 
     { 
      // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache); 
      Response.Cache.SetNoStore(); 
      if (IsLoginRequired==true) 
      { 
        if (Session.IsNewSession || HttpContext.Current.Session["Username"] == null) 
        { 
         FormsAuthentication.SignOut(); 
         FormsAuthentication.RedirectToLoginPage("Session Expired"); 
         Response.End(); 
        } 
       } 
      } 
     catch (Exception ex) 
     { 
      throw (ex); 
     } 

अब लॉग इन पेज में आप इस कोड

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR"); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); 
      cookie.Name = "jay"; 
      Session["UserName"] = txt_UserName.Text.Trim(); 
      Response.Cookies.Add(cookie); 
      txt_UserName.Text = ""; 
      txt_Password.Text = ""; 
      Response.Redirect("HomePage2.aspx"); 

अब आप प्रवेश पृष्ठ

protected void Page_PreInit(object sender, EventArgs e) 
    { 
     Master.IsLoginRequired = false; 
    } 

में pageinit घटना जोड़ने के लिए एवेन्यू लिखने की ज़रूरत आप उपयोगकर्ता उपयोग कर सकते हैं कि चाहते हैं

सेट 01 के पेजिनिट ईवेंट में एक अधिकृत पृष्ठ

web.config फ़ाइल में loginurl भी निर्दिष्ट करें।

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