首页 > 解决方案 > 创建新中间件后,无法使用 JWT 令牌在 Django Rest Framework 自定义请求中间件中使用用户

问题描述

我想request.user在 Django Rest Framework 自定义中间件中使用。它返回 AnonymousUser 并且我失败了。

我创建了返回真实用户的新自定义中间件。

from django.contrib.auth.middleware import get_user
from django.utils.functional import SimpleLazyObject
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

class AuthenticationMiddlewareJWT(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        request.user = SimpleLazyObject(lambda: self.__class__.get_jwt_user(request))
        return self.get_response(request)

    @staticmethod
    def get_jwt_user(request):
        user = get_user(request)
        if user.is_authenticated:
            return user
        jwt_authentication = JSONWebTokenAuthentication()
        if jwt_authentication.get_jwt_value(request):
            user, jwt = jwt_authentication.authenticate(request)
        return user

在中间件之上jwt_authentication.get_jwt_value(request),这总是返回 None。

如何修复它并request.user在自定义中间件中使用?

标签: pythondjangodjango-rest-frameworkjwtdjango-middleware

解决方案


推荐阅读