2013-03-14 15 views
6
[Authorize] 
public class MyController : BaseController 
{ 
    [PermissionAuthorize] 
    public ActionResult GridData() 
    { 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

मैंने विशेष कार्रवाई पर उपयोगकर्ता की चेक अनुमति के लिए अनुमति एथोइज़ एट्रिब्यूट बनाया है। मुझे कोई समस्या है उपयोगकर्ता सत्र या टिकट समाप्त होने के बाद उस समय उपयोगकर्ता उपयोगकर्ता को एजेक्स को नियंत्रक को भेजता है तो अधिकृत विशेषता अनुरोध को अस्वीकार कर देती है और उपयोगकर्ता को HTML लॉगिन फॉर्म के रूप में वापस लौटाती है। यह क्षेत्र उपयोगकर्ता सोच एप प्रदर्शन नहीं कर रहा है। इसका शो उपयोगकर्ता को खराब प्रभाव दिखाता है।पृष्ठ लॉगिन करने के लिए नियंत्रक पर अजाक्स reqest अनधिकृत रीडायरेक्ट कैसे करें? ।

इसलिए, यदि मैं टिकट की समाप्ति पर AJAX अनुरोध भेजता हूं तो मैं लॉगिन पृष्ठ पर उपयोगकर्ता को रीडायरेक्ट करना चाहता हूं।

क्या मैं नियंत्रक के लिए एक अन्य अधिकृत विशेषता बना सकता हूं क्या यह गड़बड़ है?

+0

डैरिन: तो तुम एक global ajax handler कि लॉगऑन पेज जब 401 स्थिति कोड सर्वर से भेजा जाता है (जो जब रूपों प्रमाणीकरण टिकट समाप्त हो रहा है या उपयोगकर्ता सब पर प्रमाणित नहीं है क्या होगा) पर रीडायरेक्ट करेगा लिख ​​सकता है यहां दिए गए उत्तर: http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls –

उत्तर

3

के बाद कोड आप मदद कर सकता है:

$.ajax({ 
    url: 'url',  
    statusCode: { 
     404: function() { 
      //page not found 
     }, 
     200: function() { 
      //ok, do your stuff 
     }, 
     302: function() { 
      //redirect - check if url contains login and do redirect    
     } 
    } 
}) 

मूल रूप से आप केवल रीडायरेक्ट के लिए जाँच करें और success/error कॉलबैक में नियमित रूप से सामान कर सकते हैं, लेकिन जब आप http हैडर अनुप्रेषित मिल आप इच्छित प्रवेश पृष्ठ पर window.location.href बदल

5

पहली चीज़ जो आपको करने की आवश्यकता है, फॉर्म 4 प्रमाणीकरण मॉड्यूल को कॉन्फ़िगर करना है ताकि 401 फेंकने पर लॉगऑन पेज पर रीडायरेक्ट करना बंद कर दिया जा सके। फिल हैक ने nice article लिखा कि यह कैसे प्राप्त किया जा सकता है।

एक बार ऐसा करने के बाद आप क्लाइंट पर 401 HTTP स्टेटस कोड कैप्चर करने में सक्षम होंगे। पहले से ही

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 401) { 
     // unauthorized 
     window.location.href = '/logon'; 
    } 
}); 
+1

AJAX त्रुटि का पता लगाने के लिए यह गड़बड़ तरीका है लेकिन मेरे senerio में मैं कुछ मामलों में केंडो ui डेटा स्रोत का उपयोग कर रहा हूँ ड्रॉप डाउन डेटा और ग्रिड डेटा की तरह। इस तरह से मैं AJAX त्रुटि को संभाल नहीं सकता। – pargan

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

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