tl;dr: Utilisez @Nader Le code de l'entreprise. MAIS j'ai découvert que j'avais besoin de l'ajouter dans mon conifg/environments/[production|development].rb
et passer mon domaine préfixé par points comme argument. Ceci est sur Rails 3.2.11
Les sessions de cookies sont généralement stockées uniquement pour votre domaine de premier niveau.
Si vous regardez dans 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
y othersub.yourdomain.com
y yourdomain.com
Le défi consiste à utiliser le même fichier de stockage de session dans tous les sous-domaines.
Étape 1 : Utilisez @Nader 's CustomDomainCookie
code
C'est là que Middleware en rack vient dans. Quelques autres ressources pertinentes sur les rails et crémaillères :
En gros, cela permet de faire correspondre toutes les données de votre session de cookies au même fichier de cookies qui correspond à votre domaine racine.
Étape 2 : Ajouter à la configuration Rails
Maintenant que vous avez une classe personnalisée dans la bibliothèque, assurez-vous qu'elle est chargée automatiquement. Si cela ne vous dit rien, regardez ici : Rails 3 autoload
La première chose à faire est de s'assurer que vous utilisez un magasin de cookies à l'échelle du système. Dans config/application.rb
nous indiquons à Rails d'utiliser un magasin de cookies.
# We use a cookie_store for session data
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
La raison pour laquelle il est mentionné ici, c'est à cause de la :domain => :all
ligne. D'autres personnes ont suggéré de préciser :domain => ".yourdomain.com"
au lieu de :domain => :all
. Pour une raison quelconque, cela n'a pas fonctionné pour moi et j'ai eu besoin de la classe Middleware personnalisée comme décrit ci-dessus.
Alors dans votre config/environments/production.rb
ajouter :
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
Notez que le point précédent est nécessaire. Voir " des cookies de sous-domaine, envoyés dans une requête du domaine parent ? " pour savoir pourquoi.
Alors dans votre config/environments/development.rb
ajouter :
config.middleware.use "CustomDomainCookie", ".lvh.me"
L'astuce lvh.me permet de mapper sur localhost. C'est génial. Voir ce Railscast sur les sous-domaines y cette note pour plus d'informations.
J'espère que ça devrait le faire. Honnêtement, je ne sais pas vraiment pourquoi le processus est si compliqué, car j'ai l'impression que les sites à sous-domaines croisés sont courants. Si quelqu'un a des idées plus précises sur les raisons de chacune de ces étapes, veuillez nous éclairer dans les commentaires.