2008-12-18 7 views
17

J'ai eu du mal avec cela pendant un certain temps et n'ai pas été en mesure de trouver une solution . J'ai besoin d'un utilisateur pour pouvoir afficher plusieurs domaines de premier niveau avec un seul identifiant. Je comprends que cela doit être défini dans environment.rb et appelé avec before_dispatch. Voilà ce que je suis venu avec:Rails - Plusieurs domaines de premier niveau et une seule session/cookie

require 'activesupport' 
require 'dispatcher' 
module ActionController 
    class Dispatcher 

     def set_session_domain 
     ActionController::Base.session_options.update :session_domain => "#{@request.host}" 
     end 

     before_dispatch :set_session_domain 
    end 
end 

Cependant, cela ne semble pas fonctionner quand je tente de tirer les valeurs de session[:session_domain].

Toute aide est grandement appréciée.

+0

La réponse de zenazn sur les limites des cookies est bonne. Quelqu'un pourrait-il fournir des exemples pour une connexion à travers les sous-domaines, au moins? Les cookies devraient soutenir cela. Comment Rails? –

Répondre

0

Votre question n'est pas vraiment assez précise à mon humble avis. Voulez-vous un cookie unique pour toutes les applications Rails que vous avez ou est-ce dans le contexte d'un seul? Si le premier, vous voulez regarder des solutions en utilisant des sessions soutenues par la base de données ou quelque chose le long de la ligne RubyCAS pour implémenter le protocole CAS.

6

Celui-ci est un peu difficile. Puisque les cookies peuvent uniquement être attribués (et récupérés) au domaine actuel ("forms.example.com", par exemple) et aux domaines parents (".example.com", mais pas ".com"), mais PAS aux autres domaines ("othersite.com"), vous devrez vous trouver une autre solution. Cela n'a rien à voir avec Rails, mais avec le fonctionnement des cookies.

EDIT: Les sessions reposent sur un descripteur spécifique au client, stocké dans un cookie, ce qui explique pourquoi les sessions ne fonctionnent pas également avec plusieurs domaines.

This site a une solution possible pour créer un cookie inter-domaine, et c'est la façon la plus propre que je connaisse, même si elle peut avoir des implications de sécurité. Une version plus compliquée permettrait aux serveurs de communiquer directement via un canal sécurisé.

Si vous recherchez un service de connexion unique à usage plus général, essayez d'implémenter une forme de OpenID.

0

Vous aurez probablement besoin de quelque chose comme RubyCAS si vous voulez une authentification entre les domaines, qu'ils soient de niveau supérieur ou de sous-domaine.

0

Les deux Keltia et Zuk sont à droite, La réponse est rubyCAS, Nous avons le faire que l'intégration et permet

SSI - signe unique -dans Vous signez à un site et vous êtes automatiquement connecté à l'autre

SSO - Single Sign out vous déconnectez d'un site et vous automatiquement déconnecté de l'autre

pour nous, c'est une solution éprouvée et non une question difficile à mettre en œuvre

nous utilisons dans http://www.cabslk.com et www.ticketslk.com

acclamations, Sameera

2

Pour les sous-domaines Rails 2,3

ActionController::Base.session = { :domain => ".mydomain.com" } 

Pour les domaines de haut niveau tentent this middleware.Pour l'instant, j'ai joué avec le middleware ci-dessus et il ne fonctionne pas comme prévu. Si vous utilisez le middleware, vous n'avez pas besoin du code ci-dessus car il gère également les sous-domaines.

Questions connexes