2011-12-20 15 views
7

के लिए उपयोगकर्ता को रीडायरेक्ट करें मैं एकाधिक सबडोमेन के साथ रेल अनुप्रयोग में डिवीज मणि का उपयोग कर रहा हूं। प्रत्येक उप डोमेन के संबंधित नियंत्रक है, जो इस तरह दिखेगा द्वारा नियंत्रित किया जाता है:डेविस + सबडोमेन - साइन_इन

class Subdomain1Controller < ApplicationController 
    before_filter :authenticate_user! 
    def index 
    end 
end 

ऊपर नियंत्रक कार्यान्वयन के साथ, वसीयत हमेशा उपडोमेन रखने प्रवेश पृष्ठ पर उपयोगकर्ता पुनः निर्देशित करते हुए। उपर्युक्त मामले में, उपयोगकर्ता सामान्य साइन_इन यूआरएल के बजाय उपयोगकर्ता को http://subdomain1.acmesite/users/sign_in पर रीडायरेक्ट करता है।

इससे प्रत्येक उप-डोमेन के लिए एकाधिक साइन_इन यूआरएल होते हैं।

http://subdomain1.acmesite/users/sign_in 
http://subdomain2.acmesite/users/sign_in 
http://subdomain3.acmesite/users/sign_in 

मैं सोच रहा हूँ अगर यह वसीयत विधि ओवरराइड करने के लिए यूआरएल से उप डोमेन हिस्सा है और अभी तक पिछले पृष्ठ यूआरएल जानकारी रखने बाहर करने के लिए संभव है। अधिक मूल्यवान रूप से, मैं चाहता हूं कि डेविस उपयोगकर्ता को एक विशिष्ट यूआरएल (जैसे: http://acmesite/users/sign_in) पर रीडायरेक्ट करे, चाहे सबडोमेन के बावजूद और सफल प्रमाणीकरण के बाद, डेविस को उपयोगकर्ता को वापस कॉलर सबडोमेन + पृष्ठ पर वापस कर देना चाहिए।

उत्तर

-3

मैंने अपनी परियोजना से डेविस मणि छोड़ दिया और अब इसके बजाय जादूगर का उपयोग किया।

जादूगर मुझे नियंत्रक पर पूरा नियंत्रण प्रदान करता है और देखता है, पूरी तरह से मेरी परियोजना आवश्यकताओं का अनुपालन करता है। इस संक्रमण के बाद उत्पादन पर छह महीने चलने के साथ, मैं जादूगर मणि से खुश हूं।

+0

अच्छी टिप। मैं यह कोशिश कर रहा हूँ ... – alf

2

आपको एक कस्टम FailureApp लिखने की आवश्यकता है जो उपयोगकर्ता को अनधिकृत होने पर लाता है।

How To: Redirect to a specific page when the user can not be authenticated

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope 
    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 

और जोड़ने से

config/initializers/devise.rb में निम्नलिखित:

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

आप एक गैर-आरंभिकृत निरंतर CustomFailure त्रुटि मिल रहे हैं, और आप रख दिया है आपकी/lib निर्देशिका के तहत कस्टमफेलर क्लास, अपने lib.rb फ़ाइल में अपनी lib फ़ाइलों को स्वत: लोड करना सुनिश्चित करें, जैसे

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