Django REST框架自定义令牌(带有令牌访问和求章的用户对象)
我正在尝试创建一个自定义令牌,以将用户对象与访问和刷新一起发送。
注意:如果还有另一种方法,请告诉我。从头开始启动令牌代码是一个选择。
token_serializer.py
from rest_framework_simplejwt.serializers import (
TokenObtainSerializer,
RefreshToken,
api_settings,
update_last_login,
)
from django.core import serializers
from app.models.user import AppUser
class TokenSerializer(TokenObtainSerializer):
@classmethod
def get_token(cls, user):
return RefreshToken.for_user(user)
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
serialized_app_user = serializers.serialize("json", AppUser)
app_user = serialized_app_user .objects.filter(pk=self.user.id).first()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if app_user:
data["user"] = app_user
else:
data["user"] = None
if api_settings.UPDATE_LAST_LOGIN:
update_last_login(None, self.user)
return data
token_view.py
from rest_framework_simplejwt.views import TokenViewBase
from app.api.serializers import TokenSerializer
class TokenView(TokenViewBase):
serializer_class = TokenSerializer
此代码引起此错误:'modelbase'对象是不可能的
导致此错误的行,
serialized_app_user = serializers.serialize("json", AppUser)
但我添加了,因为没有以下错误发生:object object
object类型Appuser不是JSON序列化
I am trying to create a custom token to send the user object alongside the access and refresh.
Note: if there is another way to do it please tell me about it. Starting the token code from scratch is an option.
token_serializer.py
from rest_framework_simplejwt.serializers import (
TokenObtainSerializer,
RefreshToken,
api_settings,
update_last_login,
)
from django.core import serializers
from app.models.user import AppUser
class TokenSerializer(TokenObtainSerializer):
@classmethod
def get_token(cls, user):
return RefreshToken.for_user(user)
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
serialized_app_user = serializers.serialize("json", AppUser)
app_user = serialized_app_user .objects.filter(pk=self.user.id).first()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if app_user:
data["user"] = app_user
else:
data["user"] = None
if api_settings.UPDATE_LAST_LOGIN:
update_last_login(None, self.user)
return data
token_view.py
from rest_framework_simplejwt.views import TokenViewBase
from app.api.serializers import TokenSerializer
class TokenView(TokenViewBase):
serializer_class = TokenSerializer
This code led to this error: 'ModelBase' object is not iterable
The line which causes this error is
serialized_app_user = serializers.serialize("json", AppUser)
But I added it because without it the following error happens: Object of type AppUser is not JSON serializable
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您确实需要令牌中的用户信息获得端点,则需要序列化
appuser
对象:If you really need the user information in token obtain endpoint, then you will need to serialize the
AppUser
object: