template sistema loginview custom django authentication session request

django - sistema - Acceder request.session desde backend.get_user



request.user django (3)

Primero que nada: esto no es lo mismo que esto . The ModelBackend no tiene un miembro de request .

Quiero acceder a la sesión del usuario actual sin acceso al objeto de solicitud global o su ID de sesión.

¿Por qué? Escribí mi propio backend de autenticación, extendiendo ModelBackend . En eso tengo la función get_user (self, user_id) , que se llama con cada solicitud (esto lo hace automáticamente el middleware auth de Django). Lamentablemente, get_user no tiene acceso a la request , sin embargo, en mi caso, deseo verificar los datos de la sesión (¿por qué otra vez?) Porque no tengo una base de datos local y obtengo todos los datos de un middleware remoto. ser una forma cómoda de hacer algún tipo de almacenamiento en caché).


Puedes usar el pequeño ThreadLocalMiddleware . Hace que el objeto de solicitud esté disponible en todas partes.

from django_tools.middlewares import ThreadLocal request = ThreadLocal.get_current_request() # request.session <-- is now available

No olvide agregar el middleware en la tupla MIDDLEWARE_CLASSES de su settings.py:

MIDDLEWARE_CLASSES = ( ... ''django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware'', ... )


También puede pasar un parámetro de ''solicitud'' a la función de authenticate cada vez que lo llame:

def authenticate(self, request, **kwargs): ....