2011-09-07 7 views
6

Necesito dividir mi aplicación Django actual en dos sitios.Separa los sitios de Django con un back-end de authetication/registration común

El sitio A contendrá el sitio público que contendrá todas las páginas estáticas y el sistema de registro.

El otro sitio - Sitio B - es el sitio para usuarios registrados. También pueden iniciar sesión en el sitio de la aplicación a través del Sitio B.

Si no me equivoco, puedo usar el marco django.contrib.sites para realizar la tarea de tener varios sitios pero puede tener un back-end de autenticación/registro común.

¿Cómo puedo lograr esto?

Gracias.

+0

+1: nunca tuve esa situación, pero siempre fue una cuestión de cómo usar varios sitios en mi aplicación django! –

Respuesta

2

El marco django.contrib.sites de Django es bueno si ambos sitios se están ejecutando bajo el mismo servidor y tienen acceso a la misma base de datos. Si tiene una aplicación distribuida (diferentes sitios en diferentes hosts o diferentes sitios en diferentes bases de datos), puede recurrir a soluciones de inicio de sesión único.

Uso OpenID con un proveedor personalizado para centralizar inicios de sesión entre aplicaciones que se ejecutan en diferentes bases de datos. Otras soluciones incluyen CAS (provider y consumer).

2

Para este caso, se debe tener 2 archivos llamados settings.py settings_A.py y settings_B.py que especifican from settings import *

A tendría SITIO = 1 y B tendría SITIO = b. luego puede establecer estos archivos en sus configuraciones de apache estableciendo la variable de entorno para cada host virtual. DJANGO_SETTINGS_MODULE = settings_A y DJANGO_SETTINGS_MODULE = settings_B

Luego configura la aplicación contrib.sites con sus 2 nombres de dominio vinculados al ID del sitio apropiado , y sus páginas planas podrán vincularse a uno o ambos sitios.

Por último, en la configuración_A.py settings_B.py, especifique el urlconfs de raíz independiente o utilice la configuración de uso.SITE en su urlconfs para habilitar y deshabilitar grupos de URL para cada sitio.

Esperanza esto ayuda

EDIT: Para aclarar: el tiempo que se utiliza la misma base de datos y SECRET_KEY entre ambos sitios, puede utilizar las mismas cuentas de usuario entre ellos también. Si los sitios tienen el formato example.com y private.example.com, al configurar SESSION_COOKIE_DOMAIN en .example.com se permitirá que la sesión se transfiera entre ambos sitios.

+0

Hola Thomas. Este sonido es razonable. ¿Significa esto que una persona que inicia sesión en el sitio A podrá iniciar sesión en el Sitio B? Un buen ejemplo es Google, si inicias sesión en su página de inicio, puedes acceder a Gmail, a tus documentos, etc. Necesito implementar algo similar: autenticación de dominios cruzados. Gracias. –

+0

solo puede realizar el inicio de sesión automático entre dominios de forma predeterminada si ambos dominios comparten un dominio raíz, p. domain.com, sitea.domain.com y siteb.domain.com. (esta es la razón por la cual todos los sitios de google usan google.com como su dominio base).Sin embargo, puede tener un objeto de usuario que pueda usarse para iniciar sesión en ambos sitios. Para inicios de sesión persistentes entre dominios totalmente diferentes, intente esto: http://stackoverflow.com/questions/263010/whats-your-favorite-cross-domain-cookie-sharing-approach – Thomas

+0

si te gusta esta respuesta, puedes marcarla como ¿correcto? – Thomas

0

Puede usar la autenticación LDAP (externa) para ambos sitios. Necesitarías un servidor LDAP en algún lugar accesible para ambos sitios. Nunca usé esto y no sé qué tan bien se integra con Django auth embargo. Ver http://packages.python.org/django-auth-ldap/

Cuestiones relacionadas