2010-01-24 21 views
7

के लिए HttpContext.User सेट करें मैंने एएसपी.नेट एमवीसी में कस्टम प्रमाणीकरण लागू किया है। यदि कोई वैध उपयोगकर्ता लॉगिन करने का प्रयास करता है, तो मैंने खाता नियंत्रक के लॉगऑन विधि में HttpContext.User = user सेट किया है। लेकिन यह केवल के लिए रहता है जो का अनुरोध करता है। मैं इसे सत्र के लिए कैसे सेट कर सकता हूं?सत्र

मैंने एक विकल्प का उपयोग किया, HttpContext.Session["CurrentUser"] = user सेट करें। अगर मैं देखना चाहता हूं कि सत्र अधिकृत है, तो मुझे यह जांचना होगा कि HttpContext.User != null। लेकिन, मैं आवेदन में हर जगह प्रमाणीकरण तर्क का पर्दाफाश नहीं करना चाहता हूं। अगर मुझे इसे बदलने की ज़रूरत है, तो यह गन्दा होगा।

कृपया इसे हल करने में मेरी सहायता करें। एक समाधान शुरुआत में HttpContext.Session["CurrentUser"] के मूल्य के साथ प्रत्येक अनुरोध की HttpContext.User संपत्ति को पॉप्युलेट कर सकता है, लेकिन मुझे नहीं पता कि यह कैसे करें।

उत्तर

11

लिखें Global.asax के आवेदन कक्षा में निम्न विधि

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpContext.Current.User = HttpContext.Session["CurrentUser"]; 
} 

या आप System.Web.Mvc.Controller है कि आपके नियंत्रक (टिप्पणी करने के लिए विरासत में मिला है "उपयोगकर्ता" संपत्ति का उपयोग कर सकते हैं: सुनिश्चित हो अपने उपयोगकर्ता लॉगिन को सफलतापूर्वक सत्यापित करते समय Forms प्रमाणीकरण.SetAuthCookie विधि को कॉल करने के लिए)।

+0

'नेट कोर' में इसके लिए समतुल्य क्या है? –

+0

मैं भी .NET कोर में एक ही समस्या में फंस गया। मैं कई दिनों से कोशिश कर रहा हूं लेकिन मुझे कोई प्रामाणिक समाधान नहीं मिला। अगर आपको कोई समाधान मिल जाए तो कृपया मुझे बताएं। – Saif

6

ऐसा करने का सबसे अच्छा तरीका कस्टम प्रमाणीकरण मॉड्यूल लिखना और इसे अपने एप्लिकेशन में हुक करना है। यह मॉड्यूल किसी भी अनुरोध से पहले निष्पादित होगा और HttpContext.User प्रॉपर्टी को उचित के रूप में सेट करने का मौका मिलेगा।

उदाहरण के लिए, प्रपत्र प्रमाणीकरण मॉड्यूल पर विचार करें। आपके HTTP हैंडलर चलने से पहले (यह एक .aspx पृष्ठ, एमवीसी पाइपलाइन इत्यादि हो), इसके पास अनुरोध को रोकने का मौका है। यह एक लॉगिन कुकी, डिक्रिप्ट्स का मान पढ़ता है और एन्क्रिप्टेड कुकी मान सत्यापित करता है, और चेक पास होने पर HttpContext.User सेट करता है। इस तरह, जब हैंडलर चलता है और वास्तव में अनुरोध को संसाधित करता है, तो उपयोगकर्ता संपत्ति पहले से ही सही ढंग से सेट हो चुकी है।

अंत में, यह कैसा दिखाई देगा कि आपको एएसपी.नेट पर एक कस्टम प्राधिकरण विशेषता की आवश्यकता नहीं है, क्योंकि पहले से ही प्रदान की गई [प्राधिकृत] विशेषता आपके कस्टम प्रमाणीकरण मॉड्यूल के साथ स्वचालित रूप से काम करनी चाहिए। हालांकि, आपके AccountController.LogOn() विधि (या जो भी आप इसके बदले उपयोग करते हैं) को उचित प्रमाणीकरण प्रदाता के साथ संवाद करने की आवश्यकता होगी जो टोकन उत्पन्न करता है जिसे प्रमाणीकरण मॉड्यूल द्वारा सत्यापित किया जाएगा। यह एकमात्र ऐसा स्थान होना चाहिए जहां आपको बॉक्स में प्रदान किए गए कोड से अलग कोड लिखना होगा।

अधिक जानकारी के लिए http://social.msdn.microsoft.com/Search/en-US?query=http%20modules और http://social.msdn.microsoft.com/Search/en-US?query=custom%20authentication%20asp.net देखें।

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