Bazı nedenlerden dolayı :all
alan adıyla değiştirmek benim için işe yaramadı (raylar 3.2.11). Düzeltmek için özel bir Middleware gerekiyordu. Bu çözümün bir özeti aşağıdadır.
tl; dr: Özel bir Rack Middleware yazmanız gerekir. Onu conifg/environments/[production|development].rb
. Bu Rails 3.2.11'de
Çerez oturumları genellikle yalnızca üst düzey alanınız için saklanır.
Eğer bakarsanız Chrome -> Settings -> Show advanced settings… -> Privacy/Content settings… -> All cookies and site data… -> Search {yourdomain.com}
sizin için ayrı girişleri olacağını görebilirsiniz sub1.yourdomain.com
ve othersub.yourdomain.com
veyourdomain.com
Buradaki zorluk, tüm alt alan adlarında aynı oturum saklama dosyasını kullanmaktır.
Adım 1: Özel Ara Yazılım Sınıfı Ekleyin
Rack Middleware burada devreye girer. Bazı ilgili raf ve ray kaynakları:
İşte eklemeniz gereken özel bir sınıf lib
Bu @Nader tarafından yazılmıştır ve hepiniz ona teşekkür etmelisiniz.
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
Temel olarak bunun yaptığı şey, tüm çerez oturum verilerinizi kök etki alanınıza eşit olan aynı çerez dosyasına geri eşlemesidir.
Adım 2: Rails Yapılandırmasına Ekle
Artık lib'de özel bir sınıfınız olduğuna göre, onu otomatik olarak yüklediğinizden emin olun. Bunun sizin için hiçbir anlamı yoksa, buraya bakın: Rails 3 otomatik yükleme
İlk şey, bir çerez deposu kullanarak sistem genelinde olduğunuzdan emin olmaktır. İçinde config/application.rb
Rails'e bir çerez deposu kullanmasını söylüyoruz.
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
Bunun burada belirtilmesinin nedeni :domain => :all
satırdan kaynaklanmaktadır. :domain => ".yourdomain.com"
Bunun yerine belirtmeyi öneren başka insanlar var :domain => :all
. Bazı nedenlerden dolayı bu benim için işe yaramadı ve yukarıda açıklandığı gibi özel Middleware sınıfına ihtiyacım vardı.
Sonra config/environments/production.rb
eklediğinizde:
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
Önceki noktanın gerekli olduğuna dikkat edin. "Bkz Bir üst etki alanı isteği? Gönderilen alt alan çerezleri, niçin".
Sonra config/environments/development.rb
eklediğinizde:
config.middleware.use "CustomDomainCookie", ".lvh.me"
Lvh.me hilesi localhost ile eşleşir. Bu harika. Alt alan adları hakkındaki bu Railscast'e ve daha fazla bilgi için bu nota bakın.
Umarım bunu yapmalıdır. Dürüst olmak gerekirse, çapraz alt alan sitelerinin yaygın olduğunu düşündüğüm için sürecin neden bu kadar karmaşık olduğundan tam olarak emin değilim. Bu adımların her birinin ardındaki nedenlerle ilgili daha fazla bilgi sahibi olan varsa, lütfen yorumlarda bizi aydınlatın.