DRF SimpleJWT удалить пароль и добавить поле даты - PullRequest
0 голосов
/ 28 мая 2020

Я создал настраиваемую модель пользователя, расширяющую AbstractBaseUser, где единственные данные, которые я получаю от пользователя, - это идентификатор пользователя, пользователь (поле имени пользователя) и дата (обязательно и в формате дд-мм-гггг ), и создание пользователя работает нормально, как вы можете видеть из БД на следующем изображении

user table in HeidiSQL

Используется password = None и last_login = None для ссылки мне не нужны таблицы паролей и last_login.

Затем было создано представление, к которому могут получить доступ только аутентифицированные пользователи.

Для обработки аутентификации использовалось simpleJWT . В urls.py

# JWT Token
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain'),
# Get a new token before the old expires.
path('api/token/refresh/', TokenRefreshView.as_view, name='token_refresh'),

И, перейдя к http://127.0.0.1: 8000 / api / token / , я вижу вот что (работает как ожидалось)

DRF simple JWT

Я ранее тестировал с пользователем и паролем в другом проекте с моделью пользователя, которая включала эти данные (пользователь и пароль), и работала нормально. Теперь, если я попробую отправить сообщение с существующим пользователем, но без пароля, я получаю предупреждение и не могу отправить сообщение

Это поле может быть не пустым.

simpleJWT without password

Если я добавлю что-нибудь, кроме пробела, появится следующая ошибка:

TypeError в / api / token / object of type «NoneType» не имеет len ()

not working simplejwt

Как я могу удалить поле пароля? Кроме того, как я могу добавить поле даты?

1 Ответ

0 голосов
/ 29 мая 2020

Я также столкнулся с той же проблемой, и каким-то образом мне удалось решить эту проблему.

Вот решение,

  1. Заменить класс TokenObtainPairSerializer __init__ метод, как показано ниже,

  2. Используйте del password, чтобы он не запрашивал пароль и не добавлял любые поля, которые вы хотите.

class CustomSerializer(TokenObtainPairSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields[self.username_field] = serializers.CharField() del self.fields['password'] self.fields['last_login'] = serializers.DateField(initial=datetime.date.today)

Это действительно хорошо работает.

Вот ссылка - Как пропустить или удалить поле пароля в аутентификации с помощью токена simplejwt в django rest framework? ?

Дайте мне знать, есть ли у кого-нибудь лучшее решение этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...