2011-08-19 10 views
6

Ho un sito Web creato da qualcun altro con ruby-on-rail e sto creando un'applicazione django.Integrare django e RoR (ruby on rails)

Ho bisogno che i miei utenti accedano con la mia pagina di accesso costruita su django e naviga le mie pagine di django (finora - facile da fare) ma devo anche aggiungere collegamenti nella barra laterale a quella applicazione RoR (e da lì saranno in grado di tornare alla mia app).

Gli utenti non devono sapere che stanno "lasciando" l'app django - per loro il proprio sito web - quell'app RoR ha l'aspetto e lo stesso per loro.

A. Come posso fare questo?
B. Accedono con l'app django in modo che le sessioni e tutte le cose dell'utente vengano gestite da Django. Come posso "passare" le sessioni all'app RoR? Dovrei usare iframe ??
C. Come appaiono i collegamenti in django all'URL del RoR?

Grazie ragazzi!

risposta

2

In questo caso, la migliore pratica consiste nel considerare come le reti pubblicitarie condividono lo stato tra più proprietà. Un metodo comunemente usato è un pixel di tracciamento. Ad esempio, nella vostra app Django, incorporare:

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

Assicurati che il tuo rotaie applicazione risponde a quell'indirizzo con una sessione. Questo stabilirà un cookie di sessione sul dominio dei binari.

Ora per mettere a livello di sicurezza, e dipende da quale livello di sicurezza è necessario. Puoi passare informazioni come:

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

Ovviamente non incredibilmente sicuro, ma dipende dalla tua app. Un metodo più sicuro sarebbe: (. Sia attraverso stato del database o di una chiamata applicazione lato server)

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

Poi i Rails avrebbe un meccanismo di validazione quella pedina contro il lato server app Django Più lavoro, ma più sicuro.

Un altro metodo, se le applicazioni condividono un dominio principale, è possibile utilizzare un cookie sicuro nel dominio principale per passare le informazioni tra le applicazioni. Ad esempio, https://django.myapp.com imposta un cookie myapp.com e https://rails.myapp.com sa di cercare un cookie "username". Richiede un certificato SSL con caratteri jolly nel dominio principale.

Un'altra opzione è passare il token o le informazioni di accesso con ogni collegamento all'app Rails e avere un before_filter che riconosce la mano e stabilisce la sessione in modo simile.

+0

La tua prima soluzione funziona alla grande! Molto più facile di quanto mi aspettassi. Grazie!!! Voglio commentare per altri lettori, anche se potrebbe essere ovvio, che ho capito che c'è un problema con questa chiamata dal momento che può essere utilizzata in qualsiasi momento da chiunque per avviare una nuova sessione nell'app di rota senza password! Pertanto, è necessario aggiungere il parametro t (MD5HashTokenHere) con un token nuovo e limitato nel tempo. Grazie ancora @Joshua - mi hai salvato !! – reakh

0

Non sono sicuro che funzionerà, ma l'abbiamo fatto prima di utilizzare 2 app per binari.

Assicurarsi che le chiavi di sessione in Rails e nell'app django siano le stesse.

In Rails, sarà probabilmente simile a questa:

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

In Django, una rapida di Google mi ha portato a questo:

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

penso che una volta che questi sono gli stessi, le due app condivideranno la stessa sessione.

+0

Pat, credo che Rails e Django abbiano diversi formati di sessione e protocolli, quindi non possono condividere le sessioni in modo nativo (come potrebbero essere in grado di fare due applicazioni Rails) – Joshua