इस समस्या ने मुझे कुछ दिनों के लिए परेशान कर दिया है, इसलिए जवाब देने के लिए उत्तरदायी रूप से tvanfosson के उत्तर के साथ काम करता है, मैंने सोचा कि उत्तर के मुख्य भाग पर जोर देना और कुछ संबंधित पकड़ को संबोधित करना उचित होगा। मैं एक आधार नियंत्रक से विरासत है, इसलिए प्रत्येक नियंत्रक है कि यह से विरासत में मैं OnAuthorize ओवरराइड मेरे मामले में
filterContext.Result = new HttpUnauthorizedResult();
:
कोर जवाब यह, मिठाई और सरल है
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
YourAuth(filterContext); // do your own authorization logic here
}
समस्या यह थी कि 'योरऑथ' में, मैंने दो चीजों की कोशिश की जो मैंने सोचा कि न केवल काम करेगा, बल्कि तुरंत अनुरोध को समाप्त कर देगा। खैर, यह नहीं है कि यह कैसे काम करता है। तो सबसे पहले, दो चीजें हैं जो काम नहीं करते हैं, अप्रत्याशित रूप से:
filterContext.RequestContext.HttpContext.Response.Redirect("/Login"); // doesn't work!
FormsAuthentication.RedirectToLoginPage(); // doesn't work!
इतना ही नहीं उन से काम नहीं करते हैं, वे या तो अनुरोध न करना पड़े। जिसका अर्थ है निम्नलिखित:
if (!success) {
filterContext.Result = new HttpUnauthorizedResult();
}
DoMoreStuffNowThatYouThinkYourAuthorized();
ठीक है, ऊपर दिए गए सही उत्तर के साथ भी, तर्क का प्रवाह अभी भी जारी है! आप अभी भी DoMoreStuff ... ऑनऑनराइज के भीतर हिट करेंगे। तो इसे ध्यान में रखें (DoMore ... इसलिए किसी और में होना चाहिए)।
लेकिन सही उत्तर के साथ, जबकि तर्क का ऑनअधिकृत प्रवाह अंत तक जारी रहता है, उसके बाद आप वास्तव में जो भी उम्मीद करते हैं उसे प्राप्त करते हैं: आपके लॉगिन पृष्ठ पर रीडायरेक्ट (यदि आपके पास अपने वेबकॉन्ग में फ़ॉर्म्स ऑथ में एक सेट है) ।
लेकिन अप्रत्याशित रूप से, 1) Response.Redirect ("/ लॉग इन") काम नहीं करता है: कार्रवाई पद्धति अभी भी बुलाया जाता है, और 2) FormsAuthentication.RedirectToLoginPage(); वही काम करता है: एक्शन विधि अभी भी कॉल हो जाती है!
जो मेरे लिए पूरी तरह से गलत लगता है, विशेष रूप से उत्तरार्द्ध के साथ: कौन सोचा होगा कि फॉर्म प्रमाणीकरण। रीडायरेक्ट टोलोगिनपेज अनुरोध समाप्त नहीं करता है, या फ़िल्टरकॉन्टेक्स्ट.Result = new HttpUnuthorizedResult() के समकक्ष समकक्ष करता है?
करना चाहिए मुझे नहीं लगता कि एक लिंक है जिसे मैं इसे नीचे ले जाने के कारण थोड़ा सा आसान कर सकता हूं? – Maslow
क्या स्पष्ट नहीं है? यह पहली बार प्राधिकृतकोर का उपयोग यह जांचने के लिए करता है कि उपयोगकर्ता अधिकृत है या अनुमति की भूमिका में है या नहीं। यदि नहीं, तो यदि उपयोगकर्ता प्रमाणीकृत नहीं है तो यह फ़िल्टर के संदर्भ पर परिणाम सेट करके अनधिकृत प्रतिक्रिया देता है। यदि यह प्रमाणित है, तो यह जांचता है कि क्या यह "सुपर यूज़र" की अतिरिक्त भूमिका में है (एक डिफ़ॉल्ट भूमिका, विशेषता में निर्दिष्ट नहीं है)। यदि नहीं, तो यह इंगित करता है कि अधिकृत होने पर, उपयोगकर्ता कार्रवाई के लिए वैध भूमिका में नहीं है। जब उपयोगकर्ता अधिकृत होता है और वैध भूमिका (या सुपरयूसर) में, यह डाउनस्ट्रीम कैशिंग – tvanfosson
को रोकने के लिए कैश नीति सेट करता है, तो मुझे यहां एक बेहतर उत्तर मिला: http://stackoverflow.com/questions/1498727/asp-net-mvc- कैसे-टू-शो-अनधिकृत-त्रुटि-ऑन-लॉगिन-पेज – bluee