Задать вопрос
Seletach
@Seletach
Начинающий бекендер

Почему не получается получить токен rest_framework.authtoken на других пользователей, хотя на админа получаю?

Сделал авторизацию с помощью библиотеки Djoser, все ендпоинты работают как положено. Но вот токен авторизации я могу получить только на Админа, на других зарегистрированных пользователей возвращается ошибка: Невозможно войти с предоставленными учетными данными.
settings:
677a343282452018531662.png
urls:
677a34709b9d5349104035.png
views:
677a3496471c3617809295.png
ошибка, хотя на пароль и емэйл админа возвращает токен:
677a34cf7a3d7657919528.png

Эту проблему не могу решить несколько дней, данные копирую прямо с БД, пробовал на разных пользователях, опечатки быть не может.

Обновление информации.
В админке джанго можно ВРУЧНУЮ выдать токен любому пользователю, и уже при POST запросе backend вернет токен только для пользователя, которому я уже вручную создал токен в админке. Это объясняет почему для админа токен возвращался, а на других нет.
677b973907030173606270.png

Django Debug Toolbar
POST запрос на получение токена на админа
677b9bf418434528413728.png
Таблица из которых черпаются данные:
677b9c5976363657974564.png
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
Seletach
@Seletach Автор вопроса
Начинающий бекендер
Ответ на мой вопрос.
Нужно было сохранять пароль при помощи функции .set_password(), вот такой код в сериалайзере:
class CustomUserCreateSerializer(ModelSerializer):

   class Meta:
        model = CustomUser
        fields = ('email',
                  'username',
                  'first_name',
                  'last_name',
                  'password')
        extra_kwargs = { # указываем обязательные поля для заполнения
            'first_name': {'required': True},
            'last_name': {'required': True},
            'username': {'required': True}
        }

    def create(self, validated_data):
        user = CustomUser (
            email=validated_data['email'],
            username=validated_data['username'],
            first_name=validated_data['first_name'],
            last_name=validated_data['last_name']
        )
        user.set_password(password) # хэшируем пароль
        user.save() # сохраняем в БД
        return user

После этого заработает получение токена. Но есть еще нюанс, если для авторизации в админке в модели используется email, то получение токена тоже нужно настроить по email, иначе будет та же ошибка:
Невозможно войти с предоставленными учетными данными.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы