【发布时间】:2021-10-21 01:47:49
【问题描述】:
我有一个代理用户模型:
class TheDude(User):
class Meta:
proxy = True
我正在使用 Django REST 框架 JWT 在 REST API 中进行 JWT 身份验证。
我想从请求中获取用户对象,但目前它是一个用户对象。因为它被代理了,所以我不能使用AUTH_USER_MODEL。我试过做一个中间件组件来覆盖请求中的用户,但它没有在那个阶段设置。我也尝试过使用JWT_RESPONSE_PAYLOAD_HANDLER,但是我的函数没有被调用所以我也不能在那里设置它。
如果我希望在我的视图中调用request.user 而不是User 时能够获得TheDude 对象,我将如何在使用REST 框架JWT Auth 库进行身份验证时执行此操作?
编辑
我已经添加了
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'myapp.authentication.MyCustomJWTAuthentication',
)
...
}
到我的 settings.py 和我的
class MyCustomJWTAuthentication(JWTAuthentication):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user_model = TheDude
当我从我的序列化程序中的请求中获取用户时,它被正确调用,它仍然是 User 类型而不是 TheDude
class TestSerializer(serializers.ModelSerializer):
user_test = serializers.SerializerMethodField('get_user_test')
def get_user_test(self, obj):
print(type(self.context['request'].user))
【问题讨论】:
标签: python python-3.x django django-rest-framework django-rest-framework-jwt