2011-08-19 18 views
6

Tengo un sitio web creado por otra persona con ruby-on-rails, y ahora estoy construyendo una aplicación django.Integrar django y RoR (ruby on rails)

Necesito que mis usuarios inicien sesión con mi página de inicio de sesión creada en django y naveguen por mis páginas django (hasta ahora, fácil de hacer) pero también necesito agregar enlaces en la barra lateral a esa aplicación RoR (y allí podrán volver a mi aplicación).

Los usuarios no deben saber que están "dejando" la aplicación django - para ellos un sitio web - esa aplicación RoR se ve y se siente igual para ellos.

A. ¿Cómo puedo hacer esto?
B. Iniciar sesión con la aplicación django para que django administre las sesiones y todos los elementos del usuario. ¿Cómo puedo "pasar" sesiones a la aplicación RoR? ¿Debo usar iframe?
C. ¿Cómo son los enlaces en django a la URL de RoR?

¡Gracias chicos!

Respuesta

2

La mejor práctica aquí sería observar cómo las redes publicitarias comparten estado en múltiples propiedades. Un método comúnmente utilizado es un píxel de seguimiento. Por ejemplo, en su aplicación Django, incrustar:

<img src="http://myrailsapp/mysession_creator" /> 

Asegúrese de que su aplicación responde carriles en esa dirección con una sesión. Eso establecerá una cookie de sesión en el dominio de los rieles.

Ahora a la capa de seguridad, y depende del nivel de seguridad que necesita. Se podía pasar en la información, como:

<img src="http://myrailsapp/mysession_creator?user=myUserName" /> 

Obviamente no es muy seguro, pero depende de su aplicación. Un método más seguro sería: (. Sea a través de estado base de datos o una llamada de aplicación del lado del servidor)

<img src="http://myrailsapp/mysession_creator?t=<MD5HashTokenHere>" /> 

Entonces los rieles aplicación tendría un mecanismo de validación de esa señal contra el lado servidor de aplicaciones Django más trabajo, pero más seguro.

Otro método, si sus aplicaciones comparten un dominio raíz, puede usar una cookie segura en el dominio raíz para pasar información entre las aplicaciones. Por ejemplo, https://django.myapp.com establece una cookie de myapp.com y https://rails.myapp.com sabe buscar una cookie de "nombre de usuario". Requiere un certificado SSL de comodín en el dominio raíz.

Otra opción es pasar el token o la información de inicio de sesión con cada enlace a la aplicación Rails, y tener un before_filter que reconoce la mano y establece la sesión de una manera similar.

+0

¡Su primera solución funciona muy bien! Mucho más fácil de lo que esperaba. ¡¡¡Gracias!!! Quiero comentar para otros lectores, aunque podría ser obvio, que me di cuenta de que hay un problema con esta llamada , ya que cualquier persona puede utilizarla en cualquier momento para iniciar una nueva sesión en la aplicación Rails sin una contraseña. Por lo tanto, se necesita agregar el parámetro t (MD5HashTokenHere) con un token nuevo y de tiempo limitado. Gracias de nuevo @Joshua - ¡me salvaste! – reakh

0

No estoy seguro de si esto funcionará, pero lo hicimos antes de usar 2 aplicaciones de rieles.

Asegúrate de que las claves de sesión en Rails y en tu aplicación django sean las mismas.

En Rails, es probable que este aspecto:

ActionController::Base.session = { 
    :key   => '_my_session_key', 
    :secret  => '_my_session_secret' 
} 

En Django, una rápida de Google me llevó a esto:

https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY

pienso una vez que esos son los mismos, las dos aplicaciones compartirán la misma sesión.

+0

Pat, creo que Rails y Django tienen diferentes formatos de sesión y protocolos, por lo que no pueden compartir sesiones de forma nativa (como dos aplicaciones Rails podrían hacerlo). – Joshua