2009-10-17 13 views
12

Tengo dos sitios que dicen foo.com y bar.com y ambos están basados ​​en Django. El registro principal ocurre en foo.com (me gustaría que el usuario principal db esté aquí) y me gustaría que ocurran tres cosas:(Django) Compartir la autenticación en dos sitios que están en dominios diferentes

1) El usuario que inicia sesión en foo.com puede acceder automáticamente bar.com sin iniciar sesión nuevamente

2) El usuario que inicia sesión en bar.com directamente se autentica contra el usuario de foo.com db.

3) No es necesario que un usuario se registre en bar.com directamente.

¿Cómo puedo lograrlo? Si simplifica enormemente las cosas, puedo hacer que bar.com sea un subdominio de foo.com (por ejemplo, bar.foo.com) pero deben ser sitios separados.

Respuesta

5

Su tercera requisito podría ser fácilmente resuelto por compartir la misma base de datos entre los dos sitios (por lo tanto tienen la misma tabla Usuarios.

La primera exigencia es complicado debido a problemas entre dominios (la cookie de sesión no será compartida .)

lo que realmente está buscando es una Single Sign On (SSO) usted podría considerar django-openid

+2

# 2 se puede hacer de varias maneras: acceso directo a la otra base de datos, o mediante el uso de un servidor <=> servidor de chat. Como dijo John, # 1 es el problema principal. –

4

Depende de sus requisitos. Si puede, la solución simple es simplemente alojar ambos sitios en una instancia de Django. En otras palabras, su proyecto Django aloja ambos sitios, pero tiene una url rewrite rule que asigna foo.com a http://localhost/foo/ y bar.com a http://localhost/bar/. El sistema de autenticación de Django "solo funcionará" en este escenario. Las reglas de reescritura también pueden aplicarse a los subdominios; Construí un sistema que aloja cientos de subdominios usando esta técnica.

Si esto no es una opción, debería funcionar el hecho de compartir las bases de datos entre sus instancias de Django y la configuración SESSION_COOKIE_DOMAIN, como lo mencionan otros.

+0

Um, ¿por qué el voto hacia abajo? Esta es una forma perfectamente natural de manejar subdominios o dominios que comparten todos los mismos datos. –

+0

Su solución potencial ciertamente no garantiza un voto a la baja. –

+0

No tengo idea de por qué votaría esta votación, pero esta parece ser una muy buena respuesta a la pregunta y parece ser exactamente lo que necesitaba. Esperemos que esto funcione con nginx frente al proyecto django ... – paperreduction

4

Tuve un problema muy similar pero OpenID no era una solución viable para mí. Con la llegada de múltiples bases de datos en django> 1.2, ahora es bastante fácil compartir datos de sesión y de inicio de sesión en todos los sitios. This blog post hace un gran trabajo al explicar cómo configurarlo. Ojalá que a otros les parezca tan útil como yo.

Cuestiones relacionadas