![](/img/trans.png)
[英]Django rest framework with Djoser token authentication token response
[英]Django rest framework with djoser token authentication retrieve user first_name
我正在使用django rest框架djoser身份驗證。 所以我想要的是當用戶登錄時,它將返回他們的用戶令牌,提示符,狀態,名字和姓氏。
djoser: http ://djoser.readthedocs.io/en/latest/introduction.html
現在,我可以顯示令牌,promptmsg和狀態,但是對於first_name和last_name,我嘗試執行此操作時出錯。
串行
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)
default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}
def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.USERNAME_FIELD] = serializers.CharField(
required=False
)
def validate(self, attrs):
self.user = authenticate(
username=attrs.get(User.USERNAME_FIELD),
password=attrs.get('password')
)
self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs
def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')
def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')
customviews.py
class CustomTokenCreateView(cutils.ActionViewMixin, generics.GenericAPIView):
"""
Use this endpoint to obtain user authentication token.
"""
serializer_class = TokenCreateSerializer
permission_classes = [permissions.AllowAny]
def _action(self, serializer):
token = utils.login_user(self.request, serializer.user)
token_serializer_class = settings.SERIALIZERS.token
content = {
'Token': token_serializer_class(token).data["auth_token"],
'promptmsg': 'You have successfully login',
'status': '200',
'first_name': self.request.user.first_name,
'last_name': self.request.user.last_name
}
return Response(
data=content,
status=status.HTTP_200_OK,
)
此代碼將給出一個錯誤:
AttributeError at /logintest/
'AnonymousUser' object has no attribute 'first_name'
有沒有辦法解決這個問題 ?
身份驗證請求的標頭中不包含身份驗證令牌,這就是為什么request.user
返回AnonymousUser對象的原因。 要解決此錯誤,您需要像這樣將serializer.user
替換為request.user
:
content = {
'Token': token_serializer_class(token).data["auth_token"],
'promptmsg': 'You have successfully login',
'status': '200',
'first_name': serializer.user.first_name,
'last_name': serializer.user.last_name
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.