2010-05-23 13 views
9

मैं (ASP.NET MVC2 का प्रयोग करके) FormsAuthentication के साथ प्रयोग कर रहा हूँ और यह काफी अच्छी तरह से काम कर रहा है।अमान्य ASP.NET FormsAuthentication सर्वर साइड

हालांकि, एक मामले मैं बाहर काम नहीं कर सकता साथ सर्वर पर उपयोगकर्ता की पहचान के सत्यापन है यह सुनिश्चित करने के लिए कैसे निपटा जाए अभी भी सर्वर के नजरिए से वैध है।

उदाहरण के लिए।

  1. में ... उपयोगकर्ता लॉग
  2. उपयोगकर्ता सर्वर के लिए एक नया अनुरोध करता है बैंड उपयोगकर्ता सर्वर साइड पर हटा दी जाती है में से एक कुकी/टिकट
  3. हो जाता है। HttpContext.User.Identity.Name हटाए गए उपयोगकर्ता पर सेट है।

मैं का पता लगा सकता हूं, लेकिन इसे संभालने का सही तरीका क्या है? OnAuthorizationOnActionExecuting पर घटनाओं में FormsAuthentication.SignOut कॉलिंग वर्तमान अनुरोध प्रभावित करने के लिए बहुत देर हो चुकी है।

वैकल्पिक रूप से मैं किसी दिए गए (या सभी) उपयोगकर्ताओं के लिए सभी टिकटों को अमान्य करने के लिए FormsAuthentication.InvalidateUser (...) को कॉल करने में सक्षम होना चाहता हूं (या) डेटाबेस हटा दिया जाता है। लेकिन मुझे ऐसा करने के लिए एक एपीआई नहीं मिल रहा है।

उत्तर

7

Global.asax में, AuthenticateRequest के लिए एक हैंडलर जोड़ने। इस विधि में, प्रपत्र प्रमाणीकरण पहले ही हो चुका है और आप किसी अन्य चीज से पहले मौजूदा प्रिंसिपल को संशोधित करने के लिए स्वतंत्र हैं।

protected void Application_AuthenticateRequest(object sender, EventArgs e) { 
    IPrincipal principal = HttpContext.Current.User; 
    if (!UserStillValid(principal)) { 
    IPrincipal anonymousPrincipal = new GenericPrincipal(new GenericIdentity(String.Empty), null); 
    Thread.CurrentPrincipal = anonymousPrincipal; 
    HttpContext.Current.User = anonymousPrincipal; 
    }  
} 

बस UserStillValid विधि को लागू करें और आप कर चुके हैं। यदि आपको आवश्यकता हो तो सामान्य प्रिंसिपल के साथ सामान्य प्रिंसिपल को स्वैप करने के लिए यह एक अच्छी जगह भी है।

+0

उपयोगकर्तास्टिल वैलिड फ़ंक्शन उपयोगकर्ता को डीबी में सक्रिय करेगा या नहीं? Thread.CurrentPrincipal = अज्ञात प्रिंसिपल और HttpContext.Current.User = अज्ञात प्रिंसिपल का अर्थ क्या है; – Thomas

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