2012-09-11 9 views
13

मेरे आवेदन में मैं साइन-इन करने और साइन आउट करने के लिए फॉर्म-प्रमाणीकरण का उपयोग कर रहा हूं।लॉगआउट उपयोगकर्ता को कैसे बल दें जब उसका उपयोगकर्ता नाम किसी अन्य उपयोगकर्ता द्वारा बदला जाता है?

एक कार्यक्षमता व्यवस्थापक अन्य उपयोगकर्ताओं के उपयोगकर्ता नाम को बदल सकता है। उस स्थिति में, मुझे उस उपयोगकर्ता को साइन आउट करने की आवश्यकता है जिसका उपयोगकर्ता नाम बदल गया है।

यदि मैं नहीं करता हूं, तो उनकी कुकीज़ पहले सेट होने के कारण, उन्हें एप्लिकेशन तक पहुंच प्राप्त होती है और त्रुटि संदेश प्राप्त होते हैं (क्योंकि उनके उपयोगकर्ता नाम मौजूद नहीं हैं और ऐसे कुछ भाग हैं जहां मैं कुछ कार्यक्षमता के लिए उनके उपयोगकर्ता नाम का उपयोग करता हूं)।

मैं इन उपयोगकर्ताओं को फॉर्म-प्रमाणीकरण का उपयोग करके लॉग आउट करने के लिए कैसे मजबूर कर सकता हूं?

अद्यतन:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string controller = filterContext.RouteData.Values["controller"].ToString(); 
     string action  = filterContext.RouteData.Values["action"].ToString(); ; 
     // Below returns the previous username, which does not exist anymore in db. 
     string userName = HttpContext.Current.User.Identity.Name; 

     UnitOfWork unitOfWork = new UnitOfWork(); 

     if (!unitOfWork.UserRepository.UserExists(userName)) 
     { 
      FormsAuthentication.SignOut(); 
      filterContext.HttpContext.Session.Clear(); 
      filterContext.HttpContext.Session.Abandon(); 
      // I am not using Roles. 


     } 
     unitOfWork.Dispose(); 
     base.OnActionExecuting(filterContext); 

    } 

मेरे ग्राहक वैश्विक फिल्टर में, मैं जाँच उपयोगकर्ता मौजूद है या नहीं, अगर नहीं मैं उन्हें आउट करें। हालांकि, यह काम नहीं कर रहा है। काम करके मेरा मतलब है कि वे प्रमाणीकरण पास करते हैं और आवेदन तक पहुंच प्राप्त करते हैं।

अग्रिम धन्यवाद।

उत्तर

9

यहाँ तुम क्या प्रस्थान करने के लिए उपयोगकर्ता के लिए मजबूर करने कैसे करते है:

public void UserPasswordChangedHandler() 
{ 
    FormsAuthentication.SignOut(); 
    Roles.DeleteCookie(); 
    Session.Clear(); 
} 

मैं लाइन स्पष्टीकरण की आवश्यकता द्वारा लाइन नहीं लगता कि, अपने स्वयं के लिए पर्याप्त व्याख्यात्मक। अगर मुझे गलत लगता है तो कृपया मुझे बताएं। बस उसे प्रवेश पृष्ठ पर रीडायरेक्ट करते हैं -

अद्यतन

आपके अतिरिक्त प्रश्न के सीधा जवाब अपने डेटा व्यवस्थापक द्वारा और हाँ अगर अद्यतन किया गया था, तो उपयोगकर्ता बूलियन ट्रैकिंग प्रति रखने के लिए है।

कृपया लेख निम्न रूपों प्रमाणीकरण जानकारी का उपयोग कर लॉगआउट मजबूर के लिए देखें:

अद्यतन 2

समाशोधन कुकीज़

आशा इस मदद आप।

+2

को मजबूर नहीं करते हैं मुझे लगता है कि यह लॉग इन किए गए उपयोगकर्ता को इंगित करता है। मैं अन्य उपयोगकर्ताओं को साइन आउट करना चाहता हूं, जिसका पासवर्ड व्यवस्थापक द्वारा बदला जाता है। खैर, मैं निश्चित रूप से इस कोड का उपयोग उस उपयोगकर्ता को लॉग आउट करने के लिए साइन इन करने के लिए कर सकता हूं लेकिन मैं कैसे समझ सकता हूं, उनका पासवर्ड बदल गया है? दूसरे शब्दों में जब इस विधि को बुलाया जाना चाहिए? –

+0

मुझे प्रदान किया गया कोड खुशी से मदद की थी। अपने अतिरिक्त प्रश्न (कैसे संभालें) का उत्तर देने के लिए, कृपया मेरे उत्तर में अपडेट देखें। –

+0

फिर से धन्यवाद। मैं अपने कस्टम एक्शनफिल्टरएट्रिब्यूट फ़िल्टर में अपने कोड का उपयोग करता हूं। वहां, मैं जांचता हूं कि उपयोगकर्ता नाम मौजूद है या नहीं, अगर ऐसा नहीं होता है (जब मैं अपना उपयोगकर्ता नाम बदलता हूं तो यह स्थिति संतुष्ट होती है), मैं उपयोगकर्ता को साइन आउट करता हूं। हालांकि, समस्या बनी रहती है। उपयोगकर्ता की कुकी रहता है और उसे एप्लिकेशन तक पहुंच प्राप्त होती है। कोई विचार ? मैंने फ़िल्टर कोड के साथ अपना प्रश्न अपडेट किया। –

2

जब किसी उपयोगकर्ता को अमान्य होने की आवश्यकता होती है तो आपको अपने विवरण किसी प्रकार की आंतरिक स्थैतिक सूची में जोड़ना होगा।

फिर प्रत्येक पृष्ठ अनुरोध (संभवतः Application_BeginRequest का उपयोग करके) देखें कि क्या उस मौजूदा उपयोगकर्ता उस सूची में है, और यदि ऐसा है तो फॉर्म प्रमाणीकरण को कॉल करें। साइन-आउट करें और फिर।

यह एक हैक की तरह लगता है, लेकिन यह अभी मैं सबसे अच्छा सोच सकता हूं।

ध्यान दें कि उपयोगकर्ता में अनुपस्थिति के सत्र स्थिति को हटाने का एक और मुद्दा पूरी तरह से है।

+0

हम अलग-अलग मशीनों से लॉग ऑन करने वाले एकाधिक उपयोगकर्ताओं को रोकने के लिए एक ही काम करते हैं, हम प्रत्येक लॉगिन के लिए एक टोकन (उपयोगकर्ता पीसी जानकारी के आधार पर) उत्पन्न करते हैं और फिर जांचते हैं कि टोकन समान है, अगर हम साइनआउट –

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