user377628
user377628

Reputation:

How do I get the user object from Django middleware?

I have the following middleware:

class TestMiddleware():
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print(getattr(request, "user", None))
        return self.get_response(request)

The print function always prints None. I added the middleware both before and after the django.contrib.auth.middleware.AuthenticationMiddleware line in settings.py, but in either case, I get None. Also, I'm logged in as a user.

What else can I try? I'm using Django 1.11.

Upvotes: 5

Views: 5912

Answers (1)

Alasdair
Alasdair

Reputation: 308849

Your middleware should be after 'django.contrib.auth.middleware.AuthenticationMiddleware' if you want to access the user. You don't need to use getattr, just request.user should work. Depending on whether you are logged in or not, it will be the logged-in user or an AnonymousUser.

Upvotes: 7

Related Questions