2012-04-07 17 views
9

पर रीडायरेक्ट करें मेरे पास एक डिफ़ॉल्ट url (myapp_url) पर रीडायरेक्ट करने के लिए यहां है। लेकिन प्रमाणीकरण के बाद उपयोगकर्ता द्वारा अनुरोध यूआरएल दर्ज करने के लिए मैं रीडायरेक्ट को बदलना चाहता हूं। मैं यह कैसे कर सकता हूं? मैंने यहां कुछ विकल्प खोजने की कोशिश की, जैसे: पीछे। लेकिन नहीं जाना।रूबी रेल - मूल अनुरोध url

उपयोगकर्ता यूआरएल में प्रवेश करता है, अगर प्रमाणीकृत नहीं है तो लॉगिन पेज पर रीडायरेक्ट हो जाता है, फिर लॉगिन उपयोगकर्ता को मूल अनुरोध url पर रीडायरेक्ट किया जाएगा।

def create 
    user = User.Authenticate(params[:user_id], params[:password]) 
if user 
    session[:user_id] = user.id 
    redirect_to myapp_url, :notice => "Logged in!" 
else 
    flash.now.alert = "Invalid email or password" 
    render "new" 
    end 

end 
+0

क्या आपको कोई समाधान मिला है? –

+0

@ Aldo'xoen'Giambelluca - अभी तक नहीं। –

+0

यह समाधान मेरे लिए काम करता है: http://stackoverflow.com/questions/9835365/devise-how-to-redirect-to-different-page-based-on-some-parameter-after-sign-in – rassom

उत्तर

1

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

+0

I यह कोशिश की, लेकिन कोई भाग्य नहीं है। 'सत्र [: return_to] || = request.referer' 'redirect_to session_to] [0 return36to]' –

12

आप माइकल हार्टल द्वारा "रूबी ऑन रेल ट्यूटोरियल" में the chapter about "Friendly forwarding" पढ़ सकते हैं यह देखने के लिए कि आप इसे आसानी से कैसे कार्यान्वित कर सकते हैं।

  1. store_location स्थान पर, उपयोगकर्ता सत्र
  2. redirect_back_or(url) में स्थान वांछित स्टोर करने के लिए स्थान सत्र में संग्रहीत करने के लिए उपयोगकर्ता अनुप्रेषित या, यदि सेट नहीं:

    मूल रूप से आप 3 सहायक तरीकों url विधि परम

  3. और clear_return_toredirect_back_or विधि द्वारा "आंतरिक" का इस्तेमाल किया जानकारी के इस टुकड़े स्पष्ट करने में निहित एक बार
इस्तेमाल किया

और फिर आप इन तरीकों का उपयोग करें:

ए) जब आप देखते हैं एक अतिथि उपयोगकर्ता एक पृष्ठ है कि प्रमाणीकरण उपयोग store_location की जरूरत है इससे पहले कि उसे लॉगिन पृष्ठ पर रीडायरेक्ट तक पहुँचने का प्रयास।
बी) जब कोई उपयोगकर्ता में लॉग इन किया है, तो आप redirect_back_or(url) का उपयोग करें (सही स्थान पर उसे रीडायरेक्ट करने के लिए करता है, तो निश्चित रूप से अब तक)

यह कैसे यह काम, आप अंदाजा हो के एक सिंहावलोकन है, लेकिन मुझे लगता है कि पढ़ने के लिए कार्यान्वयन (कुछ) विवरण के लिए अध्याय।

+0

क्या इसे पोस्ट अनुरोध के साथ कार्यान्वित किया जा सकता है? मान लें कि आप एक फॉर्म सबमिट कर रहे हैं और सत्र जमा करने से पहले समाप्त हो गया है। माइकल हार्टल्स उदाहरण एक रूटिंग त्रुटि का कारण बन जाएगा। मुझे लगता है कि रेल साइन इन करने के बाद अनुरोध प्राप्त करने का प्रयास करेंगे। उदाहरण के लिए, कहें कि आपके पास 'पोस्ट' और' टिप्पणियां 'हैं, जहां टिप्पणियां पोस्ट के अंतर्गत घोंसला होती हैं, और पोस्ट # शो से टिप्पणी सबमिशन होती है। लॉग इन करने के बाद परिणामी यूआरएल 'app.com/posts/1/टिप्पणियां' होगा जो रूटिंग त्रुटि उत्पन्न करता है, जो मामला पोस्ट नहीं होने पर मामला नहीं होगा। – Mohamad

+1

रीडायरेक्ट ब्राउज़र द्वारा जीईटी अनुरोध के रूप में भेजे जाते हैं। यहां तक ​​कि यदि आपको ब्राउज़र को POST के रूप में रीडायरेक्ट करने के लिए मिला है, तो मूल फ़ॉर्म सबमिशन डेटा प्रदान नहीं किया जाएगा। – kgilpin

+0

उत्तर में ट्यूटोरियल लिंक मर चुका है, यहां एक अपडेट किया गया लिंक है: https://www.railstutorial.org/book/_single-page#sec-friendly_forwarding – Nilloc

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