2013-02-21 16 views
5

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

दूसरे रीडायरेक्ट के कारण पंजीकरण के बाद मेरा फ्लैश संदेश खो गया है।

क्या कहीं कहीं मैं flash.keep को लॉगिन पथ पर रीडायरेक्ट करने से पहले एप्लिकेशन_controller.rb या एक सहायक में जोड़ सकता हूं? यदि कोई विकल्प है तो मैं इसके लिए एक डिवाइसेज नियंत्रक को ओवरराइड नहीं करना चाहूंगा।

+1

किसी भी कारण से आप नियंत्रक को ओवरराइड नहीं करना चाहते हैं? यह उचित समाधान है, बस_sign_up_path_for के बाद बदलें। – Leito

+0

ठीक है हाँ धन्यवाद करेंगे – rigyt

उत्तर

3

पंजीकरण के बाद, मैं सत्र में एक फ्लैश संदेश में लॉगिन पथ किक करने के लिए पुनर्निर्देशन से पहले (स्टोर क्योंकि उपयोगकर्ता अपुष्ट है यह "है after_ निष्क्रिय _sign_up_path_for (एक आप के लिए देख रहे हैं) ")

वसीयत पंजीकरण नियंत्रक:

class RegistrationsController < Devise::RegistrationsController 
    protected 
    def after_inactive_sign_up_path_for(resource) 
     # store message to be displayed after redirection to login screen 
     session[:registration_flash] = flash[:notice] if flash[:notice] 
     super 
    end 
end 

तो मैं यह संदेश दिखाने अगर यह लॉगिन अनुरोध के दौरान मौजूद है। वसीयत सत्र नियंत्रक: का उपयोग कर Devise Failure App methodology

के रूप में ऊपर के लिंक में दिखाया गया है एक कस्टम विफलता एप्लिकेशन बनाएं नवीनतम तैयार करने

class SessionsController < Devise::SessionsController 
    def new 
    flash[:notice] = session.delete(:registration_flash) if session[:registration_flash] 
    super 
    end 
end 
0

क्यों न केवल आप अपना संदेश कहने के लिए डिफ़ॉल्ट डिवाइसेज फ़्लैश संदेश को बदलते हैं? आप devise.en.yml फ़ाइल में फ़्लैश संदेश संपादित कर सकते हैं। मुझे लगता है कि के तहत registrationssigned_up_but_unconfirmed

1

अद्यतन कर रहा है @ rigyt का जवाब।

lib/devise_failure.rb:

def respond 
    if http_auth? 
     http_auth 
    else 
     # From original Devise Failure App 
     store_location! 
     if flash[:timedout] && flash[:alert] 
     flash.keep(:timedout) 
     flash.keep(:alert) 
     else 
     flash[:alert] = i18n_message 
     end 

     # Store flash temporarily in session because devise strips it 
     session[:login_flash] = flash.to_hash 

     redirect_to new_user_session_path 
    end 
    end 

sessions_controller:

def new 
    flash_from_session 
    super 
    end 

    def flash_from_session 
    if session[:login_flash] 
     session[:login_flash].each do |arr| 
     flash[arr.first] = arr.last 
     end 
     session.delete(:login_flash) 
    end 
    end 

इस चमक की उम्मीद के रूप में स्थापित करने और उन्हें सत्र से निकाल देंगे। मैंने यह भी पाया है कि यह pivotal के cacheable_flash

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