vor allem: das ist nicht das gleiche wie this. Das ModelBackend hat kein Mitglied request
.Zugriff request.session von backend.get_user
Ich möchte auf die Sitzung des aktuellen Benutzers ohne Zugriff auf das globale Anfrageobjekt oder seine Sitzungs-ID zugreifen.
Warum? Ich habe mein eigenes Authentifizierungs-Backend geschrieben, das ModelBackend
erweitert. Darin habe ich die Funktion get_user (self, user_id)
, die bei jeder Anfrage aufgerufen wird (dies geschieht automatisch durch die Django-Auth-Middleware). Leider get_user
hat keinen Zugriff auf request
, aber nichtsdestotrotz in meinem Fall möchte ich mit Daten in der Sitzung überprüfen (Warum wieder? Weil ich keine lokale Datenbank habe und alle Daten von einer Remote-Middleware. Die Sitzung würde eine bequeme Möglichkeit, eine Art Caching durchzuführen).
Sorry, ich weiß, dass dies ein alter Thread ist, aber ich schaue mir den referenzierten Code an und sehe nicht, wo er auf die Anfragedaten für den gerade authentifizierten Benutzer zugreift. – ThatAintWorking
@RonSmith Ich habe die Links ein wenig aktualisiert. Der Trick ist, dass alles von 'RemoteUserMiddleware.process_request' gemacht wird - es wird ein' request' Objekt (middleware.py # L40) übergeben. Es prüft auf das Vorhandensein des 'Remote-User'-HTTP-Headers (L50) und gibt diese Daten dann an 'RemoteUserBackend.authenticate' (L73) weiter und speichert das Ergebnis in' request' (L77). In diesem Fall ist nur der Wert des HTTP-Headers passeb, aber die Idee war, dass wenn Sie Session-Informationen im Auth-Backend benötigen, Sie sie dort vorsorglich von einer Middleware aus speichern könnten. – drdaeman
Stört es Sie, Ihre Antwort mit ein paar Zeilen Code als Beispiel zu aktualisieren? Vielen Dank. –