Авторизация в Django с использованием других полей

У меня есть приложение Django rest framework, и я модифицировал его модель User с помощью AbstractBaseUser. Я развернул проект на VPS, и теперь заказчик хочет внести изменения в аутентификацию. Мне нужно установить ОБА телефона и email в качестве USERNAME_FIELD, чтобы пользователи могли отправлять телефон или свой email, и я должен сделать это динамическим.

Вот мой первый подход:

Проблема в том, что я не могу удалить базу данных, потому что она находится в режиме производства. И мне нужно изменить USERNAME_FIELD как динамический выбор. Я не смог запустить команду migrate, и она выдает такую ошибку:

psycopg.errors.UniqueViolationError: Could not create unique index "user_user_username_key" 
DETAIL: Key (username)=['self']) is duplicated

Есть ли возможность сделать это, пока VPS активен? Сделать USERNAME_FIELD динамическим?

Вам необходимо иметь валидатор, который может включать в себя номер телефона, электронную почту или имя пользователя. Создайте функцию для проверки того, что username является правильным или нет, и добавьте ее к полю username_validator, как показано ниже

Ниже приведен основной пример

def username_email_phone_no_validtor(username):
    # validation logic for email or phone no 
    return True # or false


class User(AbstractBaseUser, PermissionsMixin):
    :
    :
        username_validator = username_email_phone_no_validtor
    :
    : # other fields

Это должно позволить вам добавить телефонный номер или emial или что-либо еще для имени пользователя, которое вы хотите.

Вернуться на верх