2013-04-09 8 views
5

मैं एक वेब अनुप्रयोग है, और जो पसंद के अपने पसंदीदा ब्राउज़र के रूप में Chrome का उपयोग कुछ उपयोगकर्ताओं को हल करने के लिए कैसे, निम्न त्रुटि जब वे आवेदन से लॉग आउट हो जाते हैं, और फिर से प्रवेश करने का प्रयास करें।रीडायरेक्ट लूप

"इस वेबपृष्ठ में एक रीडायरेक्ट लूप है"।

मेरे वेब आवेदन पत्र प्रमाणीकरण का उपयोग करता है, और FormAuthenticationModule अपने आवेदन की लॉग इन पृष्ठ पर वापस रीडायरेक्ट करता है, इसलिए मैं इस दृष्टिकोण का उपयोग नहीं कर सकते हैं: इसके बजाय

<customErrors mode="On" defaultRedirect="~/MyErrorPage.aspx" > 

    <error statusCode="401" redirect="~/NoAccess.aspx"/> 

</customErrors> 

, मैं Page_Load के लिए निम्न को शामिल किया है मेरे LoginPage की घटना।

if (Request.IsAuthenticated && !string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) 
{ 
    Response.Redirect("~/NoAccess.aspx"); 
} 

हालांकि, बाद से मैं इस दृष्टिकोण को शामिल किया है, उन "रीडायरेक्ट लूप" त्रुटि प्राप्त करने के लिए लग रहे हैं।

कुकीज़ साफ़ करने के बाद, सभी ठीक दिखते हैं, लेकिन समस्या फिर से होती है।

क्या इसके लिए कोई स्थायी समाधान है, मैं अपने कोड में जोड़ सकता हूं, या क्या इस मुद्दे को होने से रोकने के लिए मैं कुछ और कर सकता हूं?

उत्तर

7

अपने web.config फाइल करने के लिए इस जोड़ने का प्रयास करें:

<location path="NoAccess.aspx"> 
    <system.web> 
     <authorization> 
     <allow users="?"/> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

यह इस पृष्ठ के लिए किसी भी प्राधिकरण के बंद हो जाएगा और आपका पाश बंद कर देना चाहिए।

इस जोड़ सकते हैं:

<location path="Login.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

यह सभी उपयोगकर्ताओं के पास पहले से प्रमाणीकृत हैं करने के लिए अपने प्रवेश पृष्ठ के लिए उपयोग से इनकार करेगा। उन दोनों को संयोजित करने से आपको सभी पुनर्निर्देशन के लिए कस्टम त्रुटियां जोड़ने की अनुमति मिलनी चाहिए।

आप अनधिकृत पहुंच (उदाहरण के लिए public/) और सभी त्रुटि पृष्ठों के अंदर एक निर्देशिका बनाने पर विचार कर सकते हैं (जिन्हें अधिकृत होने की आवश्यकता नहीं है)। तो आप कर सकते हैं:

<location path="public"> 
    <system.web> 
     <authorization> 
     <allow users="?"/> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

आप स्थान here के बारे में अधिक पढ़ सकते हैं। और प्राधिकरण here के बारे में अधिक जानकारी।

2

एक बहुत ही समान समस्या थी और इसे आईआईएस में हल किया गया: Authentication सुविधा Anonymous Authentication सक्षम करें और बाकी सब कुछ अक्षम करें। यह समझ में आता है, अंततः यह वह एप्लिकेशन है जो प्रमाणीकरण तर्क प्रबंधित करता है न कि IIS या ASP.NET। लेकिन जाहिर है कि यह समाधान सार्वजनिक पृष्ठों के सुरुचिपूर्ण पहुंच का समर्थन नहीं करता है क्योंकि @Grzegorz ने सुझाव दिया था।

1

मेरे पास एक रीडायरेक्ट लूप भी था जिसके परिणामस्वरूप विजुअल स्टूडियो 2013 वेब साइट के लिए त्रुटि संदेश The request filtering module is configured to deny a request where the query string is too long. हुआ जहां प्रमाणीकरण व्यक्तिगत उपयोगकर्ता खातों पर सेट किया गया था।

अनुरोधित यूआरएल http://localhost:52266/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl.... का एक लंबा संस्करण था, इसलिए यह स्पष्ट रूप से लॉगिन पृष्ठ पर रीडायरेक्ट कर रहा था और हर बार रिटर्न यूआरएल जोड़ रहा था।

अपमानजनक लूप को खोजने के प्रयास में कोई भी ब्रेकपॉइंट्स कोई फर्क नहीं पड़ता, क्योंकि कोई भी ट्रिगर नहीं हुआ था।

अंत में मैं did the following:

  • परियोजना गुण का पता लगाएं। प्रोजेक्ट (समाधान नहीं) का चयन करके ऐसा करें और गुण विंडो देखें (राइट-क्लिक न करें, फिर गुण चुनें, अन्यथा आपको यह नहीं मिलेगा)।
  • Anonymous AuthenticationEnabled पर सेट करें।
  • Windows Authentication से Disabled पर सेट करें।

प्रोजेक्ट शुरू करते समय डिफ़ॉल्ट पृष्ठ अब प्रकट होना चाहिए और आपके द्वारा जोड़े गए ब्रेकपॉइंट्स को काम करना शुरू करना चाहिए।

+0

मैंने हाल ही में एमवीसी 5 का उपयोग करना शुरू कर दिया है, अगर मैं कभी भी इस समस्या में भाग लेता हूं तो आपका समाधान दिमाग में रखेगा। –

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