39


AuthenticateRequest घटना

क्यू 1. मेरी समझ FormsAuthenticationModule करने के लिए AuthenticateRequest घटना की सदस्यता दी गई, और इस प्रकार के बाद ही इस घटना के सक्रिय होने पर, FormsAuthenticationModule कहा जाता है। लेकिन निम्नलिखित उद्धरण मुझे मिल गया एक सा भ्रमित:

  1. AuthenticateRequest घटना संकेत है कि कॉन्फ़िगर किया गया प्रमाणीकरण तंत्र वर्तमान अनुरोध को प्रमाणीकृत किया है। कि जब AuthenticateRequest घटना उठाया है, अनुरोध (उर्फ उपयोगकर्ता) पहले से ही प्रमाणित है की सलाह देते हैं

    • नहीं उपर्युक्त उद्धरण करता है?
  2. AuthenticateRequest घटना की सदस्यता लेना सुनिश्चित करता है कि अनुरोध संलग्न मॉड्यूल या ईवेंट हैंडलर प्रक्रिया से पहले प्रमाणीकृत किया जाएगा।

    • जहां तक ​​मैं इस बोली को समझते हैं, अगर हम AuthenticatedRequest की सदस्यता, तो हमारे ईवेंट हैंडलर FormsAuthenticationModule से पहले बुलाया जाएगा? इस प्रकार Application_AuthenticateRequest() को FormsAuthenticationModule से पहले बुलाया जाएगा?


क्यू 2. बुक मैं पता चलता है कि Application_AuthenticateRequest() भीतर हम उपयोगकर्ता विशिष्ट भूमिका का एक सदस्य है कि क्या सत्यापित करने में सक्षम हैं, और यदि नहीं, तो हम उपयोगकर्ता जोड़ सकते हैं से सीख रहा हूँ स्वचालित रूप से:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
      if (User.Identity.IsAuthenticated && Roles.Enabled) 
      { 

       //here we can subscribe user to a role via Roles.AddUserToRole() 
      }  
    } 

ऊपर कोड से परखने के बाद, Application_AuthenticateRequest()FormsAuthenticationModule के बाद कहा जाता है लागू कर दिया गया है, लेकिन कहीं और एक ही किताब किका तात्पर्यFormsAuthenticationModule करने से पहले कहा जाता है:

Application_AuthenticateRequest कहा जाता है बस से पहले प्रमाणीकरण किया जाता है। यह आपके स्वयं के प्रमाणीकरण तर्क बनाने के लिए एक कूद-बंद बिंदु है।


मैं क्या याद आ रही है?


Thanx

उत्तर

50

ऐसा लगता है कि FormsAuthenticationModule पहले निपटाया जाता है। यह मॉड्यूल आमतौर पर एएसपी.नेट पाइपलाइन में किसी भी कस्टम मॉड्यूल की तुलना में पहले होता है, इसलिए जब प्रमाणीकरण रिवेस्ट निकाल दिया जाता है, तो फॉर्म प्रमाणीकरण मॉड्यूल पहले कॉल किया जाएगा, इसकी नौकरी करें और फिर आपके मॉड्यूल के ईवेंट हैंडलर को कॉल किया जाएगा।

यदि आप वास्तव में इसमें गहरी खुदाई करना चाहते हैं, तो मैं सुझाव देता हूं कि आप एएसपी.नेट कोड को डीबग करने का प्रयास करें।

http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

संपादित:: यहाँ एक पोस्ट है कि आपके वी.एस. स्थापित करने के लिए है मैं Global.asax में कस्टम मॉड्यूल और ईवेंट हैंडलर्स के साथ एक वेब परियोजना की स्थापना के इस व्यवहार की पुष्टि करने में सक्षम था।

  • एकीकृत मॉड्यूल का आरंभीकरण: HttpApplication.InitInternal के स्रोत कोड पर एक नजर डालें, आरंभीकरण का क्रम इस प्रकार है FormsAuthenticationModule HttpApplication.AuthenticateRequest घटना अप करने के लिए हुक
  • कस्टम मॉड्यूल का आरंभीकरण: कस्टम मॉड्यूल हुक HttpApplication.AuthenticateRequest के लिए ईवेंट
  • वैश्विक वर्ग (Global.asax) का प्रारंभ: यहाँ हम AuthenticateRequest घटना
  • HttpApplication.InitInternal विशिष्ट नाम पैटर्न निम्नलिखित वैश्विक वर्ग पर तरीकों के लिए खोज (जैसे Application_AuthenticateRequest को हुक), उन्हें इस घटना के लिए मेल खाती है और जब AuthenticateRequest आग, ईवेंट हैंडलर्स क्रम में वे प्रारंभ जहां कहा जाता है,

ऊपर हुक प्रारंभ करने के बाद, तो:

  • FormsAuthenticationModule.AuthenticateRequest ईवेंट हैंडलर
  • CustomModule.AuthenticateRequest ईवेंट हैंडलर
  • Global.AuthenticateRequest ईवेंट हैंडलर
  • Global.Application_AuthenticateRequest विधि

जब तक मुझे कुछ याद नहीं आया, तो ईवेंट हैंडलरों को आग लगने के लिए कोई तंत्र नहीं है, इसलिए कोई फर्क नहीं पड़ता कि फॉर्म्स प्रमाणीकरण मॉड्यूल का परिणाम क्या है। प्रमाणीकरण रिवेस्ट, अगले हैंडलर अभी भी कॉल किए जाएंगे। मुझे आशा है कि वह मदद करेंगे।

+0

Q1 का उपयोग अगर मैं तुम्हें सही ढंग से समझ सुझाव देंगे, तो AuthenticateRequest आग, FormsAuthenticationModule पहले कहा जाता है जब है, तो Application_AuthenticateRequest() और उसके बाद ही कर रहे हैं कस्टम प्रमाणीकरण मॉड्यूल कहा जाता है? Q2 - लेकिन क्या बारे में है कि MSDN उद्धरण ("AuthenticateRequest घटना संकेत है कि कॉन्फ़िगर किया गया प्रमाणीकरण तंत्र वर्तमान अनुरोध को प्रमाणीकृत किया है"), जिसका मतलब है AuthenticateRequest निकाल दिया जाता है कि बाद ही FormsAuthenticationModule अपना काम करता है? – SourceC

+1

पोस्ट में विस्तृत जवाब। क्यू 2 के बारे में - मुझे लगता है कि यह पूरी तरह से सच नहीं है: "प्रमाणीकरण रिवेस्ट इवेंट सिग्नल करता है कि कॉन्फ़िगर किए गए प्रमाणीकरण तंत्र ने वर्तमान अनुरोध को प्रमाणित किया है" - यह निश्चित रूप से प्रपत्र प्रमाणीकरण मॉड्यूल पर ईवेंट हैंडलर के माध्यम से चला गया, लेकिन हम परिणाम नहीं जानते;) – bbmud

+1

thanx। आपने वास्तव में इस – SourceC

5

आप उपयोगकर्ता वस्तु का उपयोग करना चाहते हैं, मैं तुम्हें

protected void Application_Start() 
{ 
    PostAuthenticateRequest += Application_PostAuthenticateRequest; 
} 

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
{ 
    if(User.Identity.IsAuthenticated) 
    { 
     //Do stuff here 
    } 
} 
संबंधित मुद्दे