2012-04-17 5 views
9

उपयोगकर्ता के प्रमाण-पत्रों की जांच करने और यह पुष्टि करने के बाद कि वे अच्छे हैं, मैं उपयोगकर्ता को प्रमाणीकृत करने के लिए FormsAuthentication.SetAuthCookie("Username", false); का उपयोग कर रहा हूं।क्या फॉर्म प्रमाणीकरण.SetAuthCookie() एक पुनर्निर्देश की आवश्यकता है?

मास्टरपेज में मैं यह सुनिश्चित करने के लिए Page.User.Identity.IsAuthenticated का उपयोग करता हूं ताकि हम लॉग इन उपयोगकर्ता से संपर्क कर सकें और अतिथि नहीं।

समस्या पहली बार ऑथ कुकी सेट करने में निहित है। जब मैं ऑथ कुकी सेट करता हूं, तुरंत बाद में मैं एक विधि चलाता हूं जो एक सामान्य "स्वागत, अतिथि" से स्वागत संदेश बदलने के लिए Page.User.Identity.IsAuthenticated का उपयोग करता है। एक और व्यक्तिगत "स्वागत, उपयोगकर्ता नाम!" को संदेश संदेश। यह तब तक काम नहीं करता जब तक कि मैं किसी अन्य पृष्ठ पर नहीं जाता, इसलिए मुझे पता है कि लॉगिन प्रक्रिया ने काम किया है, लेकिन ऐसा लगता है कि मुझे रीफ्रेश या रीडायरेक्ट होने तक मुझे आवश्यक जानकारी तक नहीं पहुंच सकता है।

क्या मुझे संदेश बदलने के लिए Page.User.Identity.IsAuthenticated का उपयोग करने के लिए ऑथ कुकी सेट करने के बाद उपयोगकर्ता को रीडायरेक्ट करने की आवश्यकता है?

उत्तर

6

मैंने इसे पहले देखा है, इसलिए मुझे पता है कि जवाब हाँ है। (जैसा कि, आपको Page.User.Identity.IsAuthenticated का सही उपयोग करने के लिए उपयोगकर्ता को रीडायरेक्ट करने की आवश्यकता है)

मुझे कल्पना है कि कारण यह है कि IsAuthenticated वर्तमान अनुरोध का मूल्यांकन करता है, और जब वर्तमान अनुरोध पहले आया था तो इसे प्रमाणित नहीं किया गया था।

आपको क्या करना होगा IsAuthenicated (इसे सच मानने के लिए) के बिना कहा गया विधि में जो भी तर्क है, उसे लागू करें।

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


संपादित: मेरे धारणा आप कर सकते हैं read this page बैकअप लेने के लिए।

दिलचस्प हिस्सा:

रूपों प्रमाणीकरण टिकट आपूर्ति रूपों प्रमाणीकरण ब्राउज़र द्वारा किए गए अनुरोध के अगले जानकारी।

+0

आह, यह वास्तव में मामला तो होना प्रतीत होता है, आपका जवाब के लिए धन्यवाद! मुझे लगता है कि मैं सिर्फ उपयोगकर्ता के नाम के बाद उपयोगकर्ता को रीडायरेक्ट कर सकता हूं, तो मुझे पहली बार स्वागत संदेश को पॉप्युलेट करने के लिए एक कार्य-लेखन लिखना परेशान नहीं करना पड़ेगा। –

+0

@ एसजीटीबीर्डी: हाँ, एक रीडायरेक्ट मेरे लिए एक अच्छे पर्याप्त समाधान की तरह लगता है – musefan

3

मैं यह इंगित करना चाहता हूं कि वास्तव में इसके आसपास एक तरीका है (क्योंकि मैंने इसे इस तरह के किसी अन्य प्रश्न में कभी नहीं देखा है)। आप कुकी और उसके डेटा को पुनर्प्राप्त कर सकते हैं जहां उपयोगकर्ता। AdWords की जानकारी रीडायरेक्ट के बिना आती है। बात यह है कि कुकी अभी तक ब्राउज़र पर नहीं भेजी गई है।

यह बस कुकी Response.Cookies से FormsAuthentication द्वारा बनाई गई आपत्ति हो जाता है:

HttpCookie EncryptedCookie = Response.Cookies.Get(FormsAuthentication.FormsCookieName); 
FormsAuthenticationTicket DecryptedCookie; 
try { 
    DecryptedCookie = FormsAuthentication.Decrypt(EncryptedCookie.Value); 
} catch (ArgumentException) { 
    // Not a valid cookie 
    return false; 
} 
// DecryptedCookie.Name: The Username 
// DecryptedCookie.UserData: Any additional data, as a string. This isn't normally used 
return !DecryptedCookie.Expired; 
+0

धन्यवाद @Pluto आपने दिन बचाया !!! यह आपकी टिप्पणी थी "कुकी अभी तक ब्राउज़र पर नहीं भेजी गई है" जिसने सफलता प्रदान की। –

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