2008-12-18 12 views
17

He estado luchando con esto por bastante tiempo y no he podido encontrar una solución. Necesito un usuario para poder ver múltiples dominios de nivel superior con un solo inicio de sesión.Rieles - Múltiples dominios de nivel superior y una sola sesión/cookie

Tengo entendido que esto debe establecerse en environment.rb y llamado con before_dispatch. Esto es lo que he llegado con:

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 

Sin embargo, esto no parece estar funcionando cuando intento y tiro de los valores de session[:session_domain].

Cualquier ayuda es muy apreciada.

+0

La respuesta de zenazn acerca de las limitaciones de las cookies es buena. ¿Alguien podría proporcionar ejemplos para un inicio de sesión en los subdominios, al menos? Las cookies deberían apoyar eso. ¿Cómo funciona Rails? –

Respuesta

0

Su pregunta no es realmente lo suficientemente precisa en mi humilde opinión. ¿Desea una única cookie para todas las aplicaciones de Rails que tiene o está dentro del contexto de una sola? Si es lo primero, debe buscar soluciones utilizando sesiones respaldadas por la base de datos o algo similar a RubyCAS para implementar el protocolo CAS.

6

Esto es un poco complicado. Como las cookies solo se pueden asignar (y recuperar) al dominio actual ("forms.example.com", por ejemplo) y a los dominios principales (".example.com", pero no a ".com"), pero NO a otros dominios. ("othersite.com"), tendrás que buscar otra solución. Esto no tiene nada que ver con Rails, sino con el funcionamiento de las cookies.

EDITAR: Las sesiones se basan en un identificador específico del cliente, almacenado en una cookie, por lo que las sesiones tampoco funcionan entre dominios.

This site tiene una posible solución para crear una cookie entre dominios, y es la forma más limpia que conozco, aunque puede tener algunas implicaciones de seguridad. Una versión más complicada haría que los servidores se comunicaran directamente a través de un canal seguro.

Si está buscando un servicio de inicio de sesión único más general, intente implementar alguna forma de OpenID.

0

Es probable que necesite algo como RubyCAS si desea autenticación entre dominios independientemente de si son de nivel superior o de subdominios.

0

Tanto Keltia y Zuk tienen razón, es rubyCAS respuesta, tenemos que hacer la integración y permite

SSI - Inicio de sesión único -en Usted se inscribe a un sitio y que haya iniciado sesión automáticamente a la otra

SSO - Single Sign fuera se desconecta de un sitio y automáticamente se registró desde el otro

para nosotros esto es una solución probada y no algo difícil de poner en práctica

estamos utilizando en http://www.cabslk.com y www.ticketslk.com

alegrías, Sameera

2

Para subdominios en los carriles 2,3

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

Para dominios de nivel superior tratan this middleware.

He estado jugando con el middleware anterior por el momento y no funciona del todo como se esperaba. Si usa el middleware, no necesita el código anterior, ya que también maneja subdominios.

Cuestiones relacionadas