2010-11-14 8 views
14

का उपयोग करके साइन इन नहीं कर सकता है, तो मेरे अनुप्रयोग में मैं डेविस का उपयोग कर उपयोगकर्ताओं को प्रमाणीकृत करता हूं और मैंने देखा है कि आप उस पृष्ठ को बदल सकते हैं जिसे साइन इन विफल होने पर रीडायरेक्ट किया गया है।उपयोगकर्ता को डेविस

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    new_user_session_url(:subdomain => 'secure') 
    end 

    # You need to override respond to eliminate recall 
    def respond 
    if http_auth? 
     http_auth 
    else 
     redirect 
    end 
    end 
end 

इस उदाहरण मैं अपने खुद के CustomFailure वर्ग (custom_failure.rb) बनाया और सहायक फ़ोल्डर में रखा (यकीन नहीं है, जहां यह डाल करने के लिए) के बाद: विकि पर मैं निम्न उदाहरण मिल गया।

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    new_user_session_url(:subdomain => 'secure') 
    end 

    # Redirect to root_url 
    def respond 
    if http_auth? 
     http_auth 
    else 
     root_url 
    end 
    end 
end 

मैं भी config/initializers/devise.rb फ़ाइल में निम्न जोड़ा (के रूप में विकी राज्यों से किया जाना चाहिए):

config.warden do |manager| 
    manager.failure_app = CustomFailure 
end 

हालांकि मैं मिल इसे निम्नलिखित वर्ग मैं बनाया है कोई त्रुटि नहीं, जब मैं गलत तरीके से साइन इन करता हूं, तब भी यह/उपयोगकर्ता/sign_in पृष्ठ (रूट पेज नहीं) पर रीडायरेक्ट करता है और कुछ भी लोड नहीं होता है (हालांकि पृष्ठ खाली नहीं है, भले ही स्रोत खाली नहीं है)। क्या मेरे कस्टमफेलर क्लास में कुछ गड़बड़ है या शायद यह गलत फ़ोल्डर में है?

मैं रेल 3.0.1 और डेविस 1.1.rc0 का उपयोग कर रहा हूं। How To: Redirect to a specific page when the user can not be authenticated

उत्तर

19

प्रयास आप में custom_failure.rb डाल lib फ़ोल्डर के रूप में यह एक सहायक नहीं है:

विकी जहां इस कोड मिलता है, पर है। फिर सुनिश्चित करें कि फ़ाइल लोड हो गई है। शायद आप lib में स्वचालित रूप से सभी फ़ाइलों को लोड करने का प्रयास करेंगे।

संपादित: एक ऑटो आप lib लोड प्राप्त करने के लिए सम्मिलित अपनी application.rb के लिए निम्न:

config.autoload_paths += %W(#{config.root}/lib) 

EDIT2: आप जब रीडायरेक्ट करने के लिए कोशिश कर रहा redirect_to कॉल करने के लिए भूल गया था। फिलहाल respond केवल root_url लौटाता है। FYI

def respond 
    if http_auth? 
    http_auth 
    else 
    redirect_to root_url 
    end 
end 

: इस प्रयास करें वसीयत-लोग भी पुनर्निर्देशित करने से पहले इस करते हैं:

store_location! 
flash[:alert] = i18n_message unless flash[:notice] 
+0

हम्म यह काम नहीं किया। यह वही काम किया। – Fizz

+0

मैंने आपकी समस्या पर पुनर्विचार किया। मेरा दूसरा दृष्टिकोण आज़माएं - उम्मीद है कि मदद मिलेगी! – pex

+0

आपको बहुत बहुत धन्यवाद। यह काम करता हैं! मैंने store_location नहीं जोड़ा! बिट, क्या मुझे रीडायरेक्ट से पहले अपने 'else' खंड में ऐसा करना चाहिए? – Fizz

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