prima di tutto: questo è non uguale a this. ModelBackend non ha alcun membro request
.Access request.session da backend.get_user
Desidero accedere alla sessione dell'utente corrente senza accedere all'oggetto di richiesta globale o al suo ID di sessione.
Perché? Ho scritto il mio backend di autenticazione, estendendo ModelBackend
. In questo ho la funzione get_user (self, user_id)
, che viene chiamata con ogni richiesta (questa operazione viene eseguita automaticamente dal middleware di Django auth). Purtroppo, get_user
non ha accesso a request
, ma nel mio caso voglio comunque controllare i dati nella sessione (perché ancora? Perché non ho un database locale e ottengo tutti i dati da un middleware remoto. essere un modo comodo per fare un qualche tipo di memorizzazione nella cache).
dispiace, so che questo è un vecchio thread, ma sto guardando il codice di riferimento e non vedo dove sta accedendo ai dati di richiesta per l'utente ho appena autenticato. – ThatAintWorking
@RonSmith Ho aggiornato i collegamenti un po '. Il trucco è che tutto è fatto da 'RemoteUserMiddleware.process_request' - viene passato un oggetto' request' (middleware.py # L40). Verifica la presenza dell'intestazione HTTP 'Remote-User' (L50) e in tal caso passa tali dati a' RemoteUserBackend.authenticate' (L73) e salva il risultato in 'request' (L77). In questo caso, solo il valore dell'intestazione HTTP è passeb, ma l'idea era che se hai bisogno di informazioni sulla sessione nel back-end auth, puoi memorizzarlo preventivamente da un middleware. – drdaeman
Ti dispiace aggiornare la tua risposta con poche righe di codice come esempio? Grazie. –