2012-02-28 23 views
8

रेल पर 2.3.8 साइट पर मेरे पास प्रत्येक पृष्ठ पर लॉगिन लिंक हैं (जो उपयोगकर्ता को एक अलग साइनइन पेज पर ले जाता है)। सफल लॉगिन के बाद उपयोगकर्ता को वर्तमान में रूट पर रीडायरेक्ट किया जाता है। इसके बजाय मैं उस पृष्ठ पर रीडायरेक्ट करना चाहता हूं जिसे वे पहले देख रहे थे।लॉगिन (रेल) के बाद उपयोगकर्ता को पिछले पृष्ठ पर लौटें

मैं request.referer का उपयोग कर की कोशिश की है:

redirect_back_or_default(request.referer) 

कहाँ redirect_back_or_default:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

लेकिन उस उत्पन्न करता है एक त्रुटि "पहुँच अस्वीकृत", भले ही लॉगिन सफल रहा है।

+0

यह सही दिखता है, क्या आप वाकई लॉग इन कर रहे हैं? – Chap

+0

हां वे निश्चित रूप से लॉग इन हो रहे हैं (पहले अप्राप्य पृष्ठों को देख सकते हैं, उपयोगकर्ता पेज लिंक में लॉगिन लिंक परिवर्तन, साइनइन लिंक साइनइन आदि में परिवर्तन)। त्रुटि तब भी होती है जब उपयोगकर्ता रूट से साइन इन कर रहा हो। – Exupery

+0

क्या आप अपना सत्र नियंत्रक कोड पोस्ट कर सकते हैं? – PhillipKregg

उत्तर

13
इसके बजाय रेफ़रर पर रीडायरेक्ट करने के लिए कोशिश कर के

, मैं स्थापित करेगा सत्र [: return_to]

आप की आवश्यकता होगी एक फिल्टर है कि आपके सभी कार्यों पर अपने प्रमाणीकरण से पहले चलाता है से पहले:

def store_return_to 
    session[:return_to] = request.url 
end 

फिर अपने रीडायरेक्ट को केवल

redirect_back_or_default() 
+0

बिल्कुल जो मैं खोज रहा था, यह बहुत अच्छा काम करता है! – Exupery

+0

इसके लिए धन्यवाद, मुझे खोजने के लिए घंटों लगे और स्टैक ओवरफ्लो में अन्य उत्तरों काम नहीं कर पाए। – kakubei

+0

हाँ। यह एक अच्छा गैर-देवता समाधान है। यही कारण है कि मुझे मुश्किल समय मिल रहा था, इसलिए मुझे लगा कि मैं टिप्पणियों में "डेविस का उपयोग नहीं कर रहा हूं" टाइप करना चाहता हूं ताकि यह ढूंढना आसान हो! –

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