Pour une raison quelconque remplacement d' :all
avec le domaine ne fonctionne pas (rails 3.2.11) pour moi. Il a pris un morceau de la coutume, Middleware pour le fixer. Un résumé de cette solution est ci-dessous.
tl;dr: Vous avez besoin d'écrire une coutume Middleware Rack. Vous devez l'ajouter dans votre conifg/environments/[production|development].rb
. C'est sur des Rails 3.2.11
Les cookies de session sont stockés uniquement pour votre domaine de premier niveau.
Si vous regardez en Chrome -> Settings -> Show advanced settings… -> Privacy/Content settings… -> All cookies and site data… -> Search {yourdomain.com}
Vous pouvez voir qu'il y aura des entrées séparées pour sub1.yourdomain.com
et othersub.yourdomain.com
et yourdomain.com
Le défi consiste à utiliser la même session de stocker des fichiers dans tous les sous-domaines.
Étape 1: Ajouter Des Middleware De Classe
C'est là Middleware Rack . Quelques rack & rails de ressources:
Voici une classe personnalisée qui vous convient d'ajouter dans l' lib
Ceci a été écrit par @Nader et vous devriez tous le remercier
# 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
Fondamentalement, ce que ce n'est qu'il sera de cartographier l'ensemble des votre cookie de session des données sur exactement le même fichier cookie qui est égal à la racine de votre domaine.
Étape 2: Ajouter Des Rails Config
Maintenant que vous avez une classe personnalisée dans lib, assurez-vous sont auto-chargement. Si cela ne signifiait rien pour vous, regardez ici: Rails 3 autoload
La première chose est de s'assurer que vous êtes à l'échelle du système à l'aide d'une banque de cookies. En config/application.rb
nous raconter des Rails d'installation d'un cookie magasin.
# We use a cookie_store for session data
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
La raison de ce qui est ici est ici mentionné est à cause de l' :domain => :all
ligne de. Il y a d'autres gens qui ont suggéré à spécifier :domain => ".yourdomain.com"
au lieu de :domain => :all
. Pour une raison quelconque, cela ne fonctionne pas pour moi et j'avais besoin de la coutume Middleware classe comme décrit ci-dessus.
Puis dans votre config/environments/production.rb
ajouter:
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
Notez que le point est nécessaire. Voir "sous-domaine "cookies", envoyés dans un domaine parent demande?" pour pourquoi.
Puis dans votre config/environments/development.rb
ajouter:
config.middleware.use "CustomDomainCookie", ".lvh.me"
L'hvg.moi le truc de cartes sur localhost. C'est génial. Voir ce Railscast sur les sous-domaines et cette remarque pour plus d'info.
Normalement ça devrait le faire. Honnêtement, je ne suis pas entièrement sûr de savoir pourquoi le processus est ce alambiqué, comme je me sens sous-domaine de la croix des sites sont communs. Si quelqu'un a des idées sur les raisons de chacune de ces étapes, éclaire-nous dans les commentaires.