users tutorial permisos example con close autenticacion django django-sessions

tutorial - permisos con django



Django, SESSION_COOKIE_DOMAIN con mĂșltiples dominios (4)

Creo que esto es lo que estás buscando. Me tomé horas para averiguarlo.

https://bitbucket.org/uysrc/django-dynamicsites

En Django, tengo SESSION_COOKIE_DOMAIN establecido en mi nombre de dominio. Pero en realidad me gustaría ejecutar el mismo sitio con dos nombres de dominio diferentes.

Con el conjunto SESSION_COOKIE_DOMAIN, solo el dominio nombrado permite al usuario iniciar sesión. ¿Es posible permitir que ambos dominios inicien sesión?


El SessionMiddleware estándar solo admite un SESSION_COOKIE_DOMAIN, que solo sirve para un dominio y subdominios del mismo.

Aquí hay una variación que establecerá el dominio de las cookies de forma dinámica según el host de solicitud. Para usarlo, simplemente actualice MIDDLEWARE_CLASSES para usar este SessionHostDomainMiddleware, en lugar de SessionMiddleware. Esta mejor, @jcdyer y @interstar?

import time from django.conf import settings from django.utils.cache import patch_vary_headers from django.utils.http import cookie_date from django.contrib.sessions.middleware import SessionMiddleware class SessionHostDomainMiddleware(SessionMiddleware): def process_response(self, request, response): """ If request.session was modified, or if the configuration is to save the session every time, save the changes and set a session cookie. """ try: accessed = request.session.accessed modified = request.session.modified except AttributeError: pass else: if accessed: patch_vary_headers(response, (''Cookie'',)) if modified or settings.SESSION_SAVE_EVERY_REQUEST: if request.session.get_expire_at_browser_close(): max_age = None expires = None else: max_age = request.session.get_expiry_age() expires_time = time.time() + max_age expires = cookie_date(expires_time) # Save the session data and refresh the client cookie. # Skip session save for 500 responses, refs #3881. if response.status_code != 500: request.session.save() host = request.get_host().split('':'')[0] response.set_cookie(settings.SESSION_COOKIE_NAME, request.session.session_key, max_age=max_age, expires=expires, domain=host, path=settings.SESSION_COOKIE_PATH, secure=settings.SESSION_COOKIE_SECURE or None, httponly=settings.SESSION_COOKIE_HTTPONLY or None) return response


En lugar de tener un nuevo SessionMiddleware, puede modificar las cookies de respuesta de la siguiente manera:

class CrossDomainSessionMiddleware(object): def process_response(self, request, response): if response.cookies: host = request.get_host() # check if it''s a different domain if host not in settings.SESSION_COOKIE_DOMAIN: domain = ".{domain}".format(domain=host) for cookie in response.cookies: if ''domain'' in response.cookies[cookie]: response.cookies[cookie][''domain''] = domain return response

(Coloque este middleware sobre su middleware de sesión) Puede restringirlo a dominios específicos si lo desea.


Si configura su dominio de cookie de sesión para comenzar con un "." carácter que le permitirá manejar subdominios comodín y compartir una cookie de sesión (sesión de inicio de sesión) en múltiples subdominios.

In settings.py: SESSION_COOKIE_DOMAIN="..com"

Lo anterior permitiría compartir una cookie en user1..com y user2..com.

Si realmente desea que la URL sea diferente para el mismo sitio, ¿desearía que el mismo usuario cambie entre los dos sitios en una sesión de inicio de sesión? ¿O simplemente desea que dos usuarios diferentes inicien sesión en el sitio desde dos direcciones URL diferentes (que no sean subdominios)?