Настроить сообщение по умолчанию djangorestframework-simplejwt, получаемое, когда пользователь не активен?

Я использую Django==4.0.3, djangorestframework==3.13.1 и djangorestframework-simplejwt==5.1.0 и djoser==2.1.0. Я использовал djoser для аутентификации, и все работает нормально.

Когда пользователь еще не активен, ответ такой же, как и при вводе неправильного пароля

{"detail":"No active account found with the given credentials"}

Мне нужно настроить этот ответ. Я проверил это сообщение внутри словаря в классе TokenObtainSerializer

   default_error_messages = {
    'no_active_account': _('No active account found with the given credentials')
}

пытались переопределить этот класс, но безуспешно.

Есть идеи? Спасибо

Попробуйте переопределить метод validate() TokenObtainSerializer следующим образом:

serializers.py

class CustomTokenObtainPairSerializer(TokenObtainSerailizer):
    def validate():
        ...
        authenticate_kwargs = {
            self.username_field: attrs[self.username_field],
            'password': attrs['password'],
        }
        try:
            authenticate_kwargs['request'] = self.context['request']
        except KeyError:
            pass
        self.user = authenticate(**authenticate_kwargs)
        print(self.user)
        if self.user is None or not self.user.is_active:
            self.error_messages['no_active_account'] = _(
                'No active account found with the given credentials') # --> Change this error message for what you want to replace this with.
            raise exceptions.AuthenticationFailed(
                self.error_messages['no_active_account'],
                'no_active_account',
            )
        return super().validate(attrs)

Теперь обновите свой класс сериализатора для использования пользовательского сериализатора следующим образом:

class MyTokenObtainPairSerializer(CustomTokenObtainPairSerailizer):
    pass
Вернуться на верх