Задать вопрос
sakutylev
@sakutylev
junior python developer

Как заполнять кастомную модель в django при аутентификации нового пользователя?

Добрый день!
Есть модель, реализующая профиль пользователя. Она уже заполнена данными разных пользователей, что-то вроде справочника телефонов. Эта модель связана с User с помощью one-to-one. Т.е. каждый пользователь может иметь запись в справочнике. Привожу часть модели.
class Person(models.Model):
    user = models.OneToOneField(User, verbose_name='Пользователь', related_name='profile', blank=True, null=True, unique=True)
    last_name = models.CharField(max_length=30, verbose_name='Фамилия')
    first_name = models.CharField(max_length=30, verbose_name='Имя')
    middle_name = models.CharField(max_length=30, verbose_name='Отчество')
    birthday = models.DateField(verbose_name='Дата рождения', blank=True, default='00.00.0000')
    email = models.EmailField(verbose_name='Email', blank=True)
    photo = models.ImageField(upload_to=get_person_image_path, verbose_name='Фотография', blank=True, default=None)

Появилась необходимость авторизовывать новых юзеров спомощью google apps for business, для это решил использовать django-allauth и немного поменянный адаптер для проверки имени домена в почте.
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
    def pre_social_login(self, request, sociallogin):
        email_domain = sociallogin.user.email.split('@')[1].lower()
        if not email_domain == 'domain.tld':
            raise ImmediateHttpResponse(HttpResponseRedirect('/forbidden/'))
        else:
            pass


Теперь сам вопрос, каким образом лучше сделать так что при авторизации нового пользователя, в модели Person искалась запись сравнение по email или last_name and first_name и в случае если она найдена, то заполнялось поле user по залогиневшемуся пользователю.
Что для этого лучше использовать повесить сигнал на метод в модели или написать новый метод в адаптере?
  • Вопрос задан
  • 267 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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