我在哪里可以覆盖 jwt_response_payload_handler 方法?

Where can I override jwt_response_payload_handler method?

我已经用 pip 安装了 JWT。现在我想覆盖方法

def jwt_response_payload_handler(token, user=None, request=None):
    return { 'token': token, }

成为

def jwt_response_payload_handler(token, user=None):
    return {
        'token': token,
        'user': UserSerializer(user).data
    }

我应该在哪里覆盖它?我是否在我自己的应用程序中重写该方法,但在哪里以及如何重写?还是修改库中的原始代码?

我已经修改了库中的方法并且它工作正常,但我认为这不是正确的做法。有人能帮我吗?谢谢

创建自己的处理程序方法后,您必须在 JWT_AUTH 设置中更改它。查看文档中的 Additional Settings 部分。

我发现执行以下操作很成功:

myapp.view.py 文件:

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'token': token,
        'bunny': 'fu fu'
    }

setting.py 文件:

JWT_AUTH = {
    'JWT_RESPONSE_PAYLOAD_HANDLER':
    #'rest_framework_jwt.utils.jwt_response_payload_handler',
    'myapp.views.jwt_response_payload_handler',
}

在任意位置执行函数 jwt_response_payload_handler,但要确保它在您的 python 路径中。例如在这个文件中:myapp.views.py

然后在您的 settings.py 文件中用您刚刚创建的 jwt_response_payload_handler 的新位置更新 JWT_AUTH 字典键 JWT_RESPONSE_PAYLOAD_HANDLER

一旦您了解了正在发生的事情,您就可以根据需要调整解决方案。例如,我不建议将重写的函数留在 views.py 文件中。只是为了演示目的更简单。

也许将 jwt_response_payload_handler 函数放在您创建的 "helper.py" 文件中是一个简单的解决方案。

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)