यदि आपके लॉगिन फॉर्म का अपना पृष्ठ है, तो इसके विपरीत कुछ अन्य समाधान काम नहीं कर सकते हैं, उदाहरण के लिए, प्रत्येक पृष्ठ के शीर्षलेख में लॉगिन फ़ॉर्म। लॉग इन करने के बाद, उपयोगकर्ता को दो पृष्ठों पर वापस जाना होगा, केवल एक ही नहीं।
डेविस के पास Redirecting back to the current page after sign in, sign out, update पर अच्छा तरीका है, जिससे नीचे दिया गया कोड आता है।
सत्र में मूल URL संग्रहीत करना सबसे अच्छा विकल्प है। दो पृष्ठों पर वापस जाने की उपरोक्त समस्या को हल करने के अलावा, "कई ब्राउज़र [request.referer
] शीर्षलेख नहीं भेजते हैं। इसलिए इस कार्यक्षमता को लागू करने का एकमात्र मजबूत क्रॉस-ब्राउज़र तरीका सत्र का उपयोग करके है।"
सत्र में यूआरएल संग्रहीत करते समय, किसी भी पोस्ट, पुट, या डिलीट अनुरोध के लिए यूआरएल स्टोर नहीं करना महत्वपूर्ण है, न ही कोई एक्सएचआर अनुरोध, यानी कुछ भी नहीं जिसे उपयोगकर्ता को वास्तव में रीडायरेक्ट नहीं किया जा सकता है।
ध्यान दें कि साइन आउट करने के बाद, उपयोगकर्ता का सत्र नष्ट हो गया है, इसलिए संग्रहीत यूआरएल चला गया है। इस मामले में, उपयोगकर्ता को request.referer
पर वापस भेजा जा सकता है। यह स्वीकार्य लगता है क्योंकि अधिकांश वेबसाइटों पर प्रत्येक पृष्ठ पर एक साइन आउट लिंक होता है, इसलिए रेफरर पर लौटने से वास्तव में काम किया जाएगा।
class ApplicationController < ActionController::Base
before_action :store_user_location!, if: :storable_location?
before_action :authenticate_user!
private
def storable_location?
request.get? && is_navigational_format? && !devise_controller? && !request.xhr?
end
def store_user_location!
store_location_for(:user, request.fullpath)
end
def after_sign_in_path_for(resource_or_scope)
stored_location_for(resource_or_scope) || super
end
def after_sign_out_path_for(resource_or_scope)
request.referrer || super
end
end
धन्यवाद @Billy आपकी प्रतिक्रिया के लिए .. इस कोड का उपयोग करते हुए, यह मुझे हमेशा root_path (मुख पृष्ठ) और विशिष्ट पेज जो मैं पहले लॉगिन – Rajeev
@rubydev खोला में नहीं करने के लिए, पुन: निर्देशित कर आप Firefox और ऐड-ऑन करने के लिए उपयोग रेफरर अक्षम करें? डीबग टूल का भी उपयोग करें, कहें कि क्या हुआ, यह जांचने के लिए टेम्पलेट में '<% = डीबग सत्र =>' जोड़ें या रेल कंसोल जोड़ें। –
धन्यवाद @ बिली, अब यह काम कर रहा है, यहां केवल एक बदलाव यह है कि मैं after_filter को पहले_फिल्टर – Rajeev