4

我正在使用 Django Rest Framework,并且包含了一个名为REST framework simple JWT Auth的第 3 方包,它是引用的新框架,而这个REST framework JWT Auth是旧的(我想象的),因为有很长一段时间没有在 github 上更新,可能不支持较新的版本。

我正在寻找一种方法,例如stackoverflow-3rd answer 上的这个链接,通过中间件获取每个请求的用户信息,以便在需要时通过使用 django 信号在我的模型中应用/保存用户对象. 我检查了文档和互联网,但我没有找到任何东西。因此,如果您已经有这种情况,我将感谢您的帮助。

谢谢

4

1 回答 1

14

要从用户模型中获取用户名,您应该使用 request.user。这将为您提供经过身份验证的用户的请求信息。但是,如果您使用 simple_jwt,则无法在中间件中直接使用 request.user,因为身份验证机制在视图功能中起作用。

因此,您应该在中间件中手动进行身份验证,然后您可以使用 request.user 从用户模型中获取任何数据。

from rest_framework_simplejwt import authentication


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

    def __call__(self, request):
        response = self.get_response(request)
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        request.user = authentication.JWTAuthentication().authenticate(request)[0]  # Manually authenticate the token

        print(request.user)  # Use the request.user as you want
于 2019-07-22T08:36:25.260 回答