Принудительная проверка электронной почты в django-allauth приводит к «RelatedObjectDoesNotExist: EmailAddress не имеет пользователя».ошибка - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь принудительно проверить электронную почту новых пользователей, входящих в мое приложение Django.Для этого я использую django-allauth 0.37.1.

Вы можете сделать это, переопределив приведенный ниже метод, который принадлежит классу провайдера django-allauth.Пример приведен в их исходном коде:

    def extract_email_addresses(self, data):
        """
        For example:

        [EmailAddress(email='john@example.com',
                      verified=True,
                      primary=True)]
        """
        return []

Вот что я перезаписал:

   def extract_email_addresses(self, data):
       return [EmailAddress(email=data['email'].strip().lower(), verified=True, primary=True)]

Установив verified=True, вы можете автоматически проверять электронную почту.Проблема в том, что Джанго не позволит мне.Выдает: RelatedObjectDoesNotExist: EmailAddress has no user.

Я думаю, что это связано с ограничением базы данных иностранного ключа для пользователя.Который требуется сделать по электронной почте.Единственная проблема в том, что пользователь еще не существует.Для того, чтобы создать пользователя, мне сначала нужно письмо.Ручное снятие этого ограничения на уровне базы данных не кажется правильным решением.

Мои настройки для Джанго-Аллаута:

    ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
    ACCOUNT_EMAIL_REQUIRED = True
    ACCOUNT_USERNAME_REQUIRED = False
    ACCOUNT_USER_MODEL_USERNAME_FIELD = None
    ACCOUNT_CONFIRM_EMAIL_ON_GET = True
    ACCOUNT_LOGOUT_ON_GET = True
    ACCOUNT_AUTHENTICATION_METHOD = 'username'
    ACCOUNT_USER_MODEL_USERNAME_FIELD = 'username'
    ACCOUNT_UNIQUE_EMAIL=False

Кто-то знает, что я здесь не так делаю?

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