2012-12-11 14 views
7

खोना मेरे पास अपनी खुद की प्रमाणीकरण प्रणाली (https://bitbucket.org/anton_gogolev/octalforty-structural) है जो मानक एएसपी.नेट सामग्री (<authentication mode="None" />) का उपयोग नहीं करती है।एएसपी.नेट एमवीसी में पूरी तरह से कस्टम प्रमाणीकरण: HttpContext.User

यह सादा IHttpModule रों का उपयोग करता है अपना काम करने में: BeginRequest भेजे कुकीज़ निरीक्षण करता है और एक प्रमाणीकृत उपयोगकर्ता के लिए HttpContext.Current.User और Thread.CurrentPrincipal

Thread.CurrentPrincipal = HttpContext.Current.User = 
    new GenericPrincipal(tokenIdentity,new string[] { }); 

जबकि EndRequest मुद्दों सभी आवश्यक कुकीज़ सेट सफल प्रमाणीकरण पर।

यह अब महीने के लिए ठीक काम कर रहा गया है, लेकिन कुछ सिस्टम पर (और मैं वास्तव में नहीं बता सकता कि वे किस तरह लोगों को यह वास्तव में पर काम करता है से अलग हैं) ASP.NET जगह, HttpContext.Current.User का मूल्य खोने किया जा रहा है जो भी डिफ़ॉल्ट मान हैं (GenericPrincipalGenericIdentityIsAuthenticatedfalse आदि पर सेट किए गए हैं)।

तो सवाल यह है कि कैसे और क्यों HttpContext.Current.User खो रहा है?

+0

मुझे एक ही समस्या है। कोई भी समाधान? –

+0

लक्षणों पर कोई और जानकारी? क्या यह एक उपयोगकर्ता या कई के लिए होता है? प्रभावित प्रणालियों पर, क्या यह हर बार या कुछ समय में उपयोगकर्ता को खो देता है, और अगर कुछ समय, कितनी बार? –

उत्तर

2

ऐसा लगता है कि एक और मॉड्यूल है जो BeginRequest के बाद HttpContext.Current.User को संशोधित कर रहा है। मैं PostAuthenticateRequest में इसे इसके बजाय सेट करने की अनुशंसा करता हूं।

मुझे एएसपी.NET के साथ RoleManager मॉड्यूल को सक्षम करने से पहले यह समस्या आई है। Web.config के system.web खंड में निम्नलिखित को जोड़कर इसे ठीक किया गया।

1) का पता लगाएं क्या अन्य मॉड्यूल चल रहे हैं:

<httpModules> 
    <remove name="RoleManager"/> 
</httpModules> 

यहाँ क्या मैं इसे ठीक करने के लिए किया था के बारे में कुछ amplifying जानकारी है। यहां एक article है जो ऐसा करने के लिए कुछ कोड प्रदान करता है।

2) सुनिश्चित करें कि आप सही स्थान पर HttpContext.Current.User सेट कर रहे हैं। BeginRequest हुक करने के लिए एक अच्छी जगह नहीं है। PostAuthenticateRequest आमतौर पर सबसे अच्छा (और अनुशंसित) होता है। यह समस्या को तब तक नहीं रोकेगा यदि कोई अन्य मॉड्यूल PostAuthenticateRequest का उपयोग कर रहा है और यह आपके बाद चलाया जाता है, लेकिन कई मामलों में यह समस्या को हल करेगा (उपरोक्त web.config स्निपेट का उपयोग करें)।

3) प्रत्येक स्थापित मॉड्यूल को चुनिंदा रूप से अक्षम करें और अपने कस्टम प्रिंसिपल ऑब्जेक्ट को ओवरराइट नहीं होने तक अपने एप्लिकेशन का परीक्षण करें।

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