Объект 'NoneType' не имеет атрибута 'id' после переопределения функции validate
Я настроил функцию validate
внутри rest_framework_simplejwt
так, чтобы при аутентификации пользователя она вызывала сигнал user_logged_in
, чтобы я мог видеть, вошел пользователь в систему или нет.
Проблема, с которой я столкнулся, заключается в том, что когда пользователь входит в систему, но вводит неправильные данные для входа, я получаю сообщение об ошибке:
AttributeError at /api/token/
'NoneType' object has no attribute 'id'
Вот полное отслеживание:
Traceback (most recent call last):
File "C:\Users\15512\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\15512\anaconda3\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\15512\anaconda3\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\15512\anaconda3\lib\site-packages\django\views\generic\base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\15512\anaconda3\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Users\15512\anaconda3\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
\tokens.py", line 176, in for_user
user_id = getattr(user, api_settings.USER_ID_FIELD)
AttributeError: 'NoneType' object has no attribute 'id'
Вот моя функция валидации :
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
authenticate_kwargs = {
self.username_field: attrs[self.username_field],
"password": attrs["password"],
}
try:
authenticate_kwargs["request"] = self.context["request"]
except KeyError:
pass
user = authenticate(**authenticate_kwargs)
tokens = RefreshToken.for_user(user)
user_logged_in.send(sender=user.__class__, request=self.context['request'], user=user)
if not api_settings.USER_AUTHENTICATION_RULE(user):
raise exceptions.AuthenticationFailed(
self.error_messages["no_active_account"],
"no_active_account",
)
return {
'refresh': str(tokens),
'access': str(tokens.access_token),
'user': str(user),
}
Это функция, которая обрабатывает вход/аутентификацию пользователя