Tout d'abord: c'est pas em> le même que Ce . Le ModelBackend n'a pas de demande code> membre code>. P>
Je veux accéder à la session de l'utilisateur actuel sans avoir accès à l'objet de la demande global ou à son identifiant de session. P>
pourquoi? J'ai écrit mon propre backend d'authentification, extension modelbackend code>. Dans que j'ai la fonction
get_user (auto, user_id) code>, qui est appelée à chaque demande (ceci est effectué automatiquement par le middleware Django Auth). Malheureusement,
get_user code> n'a pas accès à la demande
code>, mais néanmoins dans mon cas, je veux vérifier avec les données de la session (pourquoi encore? Parce que je n'ai pas de Base de données locale et obtenez toutes les données d'un middleware distant. La session serait une façon confortable de faire une sorte de mise en cache). P>
3 Réponses :
the distance userbackend code> (de
django.contrib.auth.backends code>
) utilise middleware spécial, distanceReMermiddleware code>
, pour accéder aux données de demande. Peut-être que vous pourriez le faire de cette façon. P>
Désolé, je sais que c'est un vieux fil, mais je regarde le code référencé et je ne vois pas où il accède aux données de la demande pour l'utilisateur que je viens d'authentifier.
@Ronsmith J'ai mis à jour un peu les liens. L'astuce est que tout a été fait par distance extrémidemiddleware.process_request code> - il est passé une demande
code> objet (middleware.py # l40). Il vérifie la présence de
utilisateur distant code> http en-tête (L50) et si elle transmet que les données à
ROUNDUREMEND.AUTHENTICTICLE CODE> (L73) et enregistre le résultat dans la demande
< / code> (L77). Dans ce cas, seule la valeur de HTTP Header est PASSEB, mais l'idée était que si vous avez besoin d'informations de session dans l'authentification, vous pourriez la cacher de manière préemptive d'un middleware.
Voulez-vous mettre à jour votre réponse avec quelques lignes de code comme exemple? Merci.
Vous pouvez utiliser le minuscule threadlocalmiddleware . Il rend l'objet de la demande partout disponible.
MIDDLEWARE_CLASSES = ( ... 'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware', ... )
Vous pouvez également passer un paramètre "demande" à la fonction authentifier code> à tout moment, vous l'appelez:
def authenticate(self, request, **kwargs):
....
La question concerne la fonction get_user, aucune authentification (..)
J'ai toujours trouvé la réponse utile car j'en avais besoin pendant l'authentification.