किसी कारण :all
से डोमेन के साथ प्रतिस्थापित करने से मेरे लिए काम नहीं हुआ (रेलगाड़ी 3.2.11)। इसे ठीक करने के लिए कस्टम मिडलवेयर का एक टुकड़ा लिया। उस समाधान का एक सारांश नीचे है।
tl; dr: आपको एक कस्टम रैक मिडलवेयर लिखने की आवश्यकता है। आपको इसे अपने में जोड़ने की आवश्यकता है conifg/environments/[production|development].rb
। यह रेल 3.2.11 पर है
कुकी सत्र आमतौर पर केवल आपके शीर्ष स्तर के डोमेन के लिए संग्रहीत किए जाते हैं।
आप में देखो, तो Chrome -> Settings -> Show advanced settings… -> Privacy/Content settings… -> All cookies and site data… -> Search {yourdomain.com}
आप देख सकते हैं कि वहाँ के लिए अलग-अलग प्रविष्टियों हो जाएगा sub1.yourdomain.com
और othersub.yourdomain.com
औरyourdomain.com
सभी उप डोमेन में एक ही सत्र स्टोर फ़ाइल का उपयोग करने की चुनौती है।
चरण 1: कस्टम मिडिलवेयर क्लास जोड़ें
यह वह जगह है जहाँ रैक मिडलवेयर आता है। कुछ प्रासंगिक रैक और रेल संसाधन:
यहाँ एक कस्टम क्लास है जिसे आपको इसमें जोड़ना चाहिए @Naderlib
द्वारा लिखा गया था और आप सभी को उसका धन्यवाद करना चाहिए
# Custom Domain Cookie
#
# Set the cookie domain to the custom domain if it's present
class CustomDomainCookie
def initialize(app, default_domain)
@app = app
@default_domain = default_domain
end
def call(env)
host = env["HTTP_HOST"].split(':').first
env["rack.session.options"][:domain] = custom_domain?(host) ? ".#{host}" : "#{@default_domain}"
@app.call(env)
end
def custom_domain?(host)
host !~ /#{@default_domain.sub(/^\./, '')}/i
end
end
मूल रूप से यह क्या करता है कि यह आपके कुकी सत्र के सभी डेटा को ठीक उसी कुकी फ़ाइल पर मैप करेगा जो आपके रूट डोमेन के बराबर है।
चरण 2: रेल विन्यास में जोड़ें
अब जब आपके पास एक कस्टम वर्ग है लिब में, सुनिश्चित करें कि यह ऑटोलॉडिंग है। अगर आपको इससे कोई मतलब नहीं है, तो यहां देखें: रेल 3 ऑटोलैड
पहली बात यह सुनिश्चित करना है कि आप कुकी स्टोर का उपयोग करके सिस्टम-वाइड हैं। में config/application.rb
हम एक कुकी दुकान का उपयोग करने के रेल बताओ।
# We use a cookie_store for session data
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
इसका कारण यहां बताया गया है कि यहां :domain => :all
लाइन का कारण है। ऐसे अन्य लोग हैं जिन्होंने :domain => ".yourdomain.com"
इसके बजाय निर्दिष्ट करने का सुझाव दिया है:domain => :all
। किसी कारण से यह मेरे लिए काम नहीं किया और मुझे ऊपर वर्णित के रूप में कस्टम मिडलवेयर वर्ग की आवश्यकता थी।
फिर अपने config/environments/production.rb
ऐड में:
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
ध्यान दें कि पूर्ववर्ती बिंदु आवश्यक है। " उप-डोमेन कुकीज़ देखें , एक मूल डोमेन अनुरोध में क्यों भेजा? " क्यों।
फिर अपने config/environments/development.rb
ऐड में:
config.middleware.use "CustomDomainCookie", ".lvh.me"
स्थानीय होस्ट पर lvh.me ट्रिक मैप्स। यह विस्मयकारी है। उप - डोमेन के बारे में इस Railscast देखें और अधिक जानकारी के लिए इस नोट ।
उम्मीद है कि इसे करना चाहिए। मैं ईमानदारी से पूरी तरह से आश्वस्त नहीं हूं कि यह प्रक्रिया क्यों जटिल है, क्योंकि मुझे लगता है कि क्रॉस सबडोमेन साइटें आम हैं। यदि किसी के पास इन कदमों के पीछे के कारणों में कोई और अंतर्दृष्टि है, तो कृपया हमें टिप्पणियों में बताएं।