¿Compartir sesión (cookies) entre subdominios en Rails?
Tengo una configuración de aplicación donde cada usuario pertenece a una empresa y esa empresa tiene un subdominio (estoy usando subdominios de estilo basecamp). El problema al que me enfrento es que Rails está creando múltiples cookies (una para lvh.me y otra para subdominio.lvh.me), lo que está provocando bastantes interrupciones en mi aplicación (como que los mensajes flash sean persistentes en todas las solicitudes una vez). registrado).
Tengo esto en mi archivo /cofig/initilizers/session_store.rb:
AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all
El dominio: :all parece ser la respuesta estándar que encontré en Google, pero no parece funcionar para mí. ¡Cualquier ayuda es apreciada!
Resulta que 'dominio: todos' crea una cookie para todos los diferentes subdominios que se visitan durante esa sesión (y garantiza que se transmitan entre solicitudes). Si no se pasa ningún argumento de dominio, significa que se crea una nueva cookie para cada dominio diferente que se visita en la misma sesión y la anterior se descarta. Lo que necesitaba era una única cookie que fuera persistente durante toda la sesión, incluso cuando cambia el dominio. Por lo tanto, aprobar domain: "lvh.me"
resolvió el problema en el desarrollo. Esto crea una única cookie que permanece allí entre diferentes subdominios.
Para cualquiera que necesite más explicaciones, este es un excelente enlace: http://excid3.com/blog/sharing-a-devise-user-session-across-subdomains-with-rails-3/
http://excid3.com/blog/sharing-a-devise-user-session-across-subdomains-with-rails-3/
"La parte que debes tener en cuenta aquí es que si configuras :domain => :all como se recomienda en algunos lugares, simplemente no funcionará a menos que estés usando localhost. :all tiene por defecto una longitud de TLD de 1 , lo que significa que si estás probando con Pow (myapp.dev), tampoco funcionará porque es un TLD de longitud 2".
En otras palabras necesitas:
App.config.session_store ... , :domain => :all, :tld_length => 2
También es una buena idea borrar las cookies.