Как войти в систему с несколькими адресами электронной почты при использовании django-allauth

У меня есть проект django с приложением django-allauth. Я хочу пройти аутентификацию по имени пользователя или электронной почте A или электронной почте B.

Я установил ACCOUNT_AUTHENTICATION_METHOD на username_email и Я подтвердил, что могу пройти аутентификацию по имени пользователя или адресу электронной почты.

Читая документацию, похоже, что я могу использовать ACCOUNT_MAX_EMAIL_ADDRESSES, но я не знаю, как его использовать.

документация django-allauth:

ACCOUNT_MAX_EMAIL_ADDRESSES(=нет) Максимальное количество адресов электронной почты, которые пользователь может связать со своей учетной записью. Этот параметр можно безопасно изменить для уже запущенного проекта — это не повлияет негативно на пользователей, которые уже превышают разрешенную сумму. Обратите внимание, что если вы установите максимальное значение 1, пользователи не смогут изменить свой адрес электронной почты, поскольку они не могут добавить новый адрес, с последующим удалением старого адреса.

Я новичок в django и борюсь с этим. Может ли кто-нибудь привести пример?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет Мари и добро пожаловать в страну чудес Джанго.

Я работал с django-allauth, но не помнил, что можно использовать несколько адресов электронной почты. Большой.

Во-первых, допустим, вы хотите разрешить пользователям связывать до 2 адресов электронной почты со своей учетной записью. Вы можете установить это значение в файле settings.py следующим образом:

ACCOUNT_MAX_EMAIL_ADDRESSES = 2

Это ограничит количество адресов электронной почты, которые могут быть связаны с учетной записью пользователя, до 2.

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

from django import forms
from allauth.account.forms import SignupForm, UserForm
from allauth.account.models import EmailAddress

class CustomSignupForm(SignupForm):
    email2 = forms.EmailField(required=False)

    def save(self, request):
        # call super save from parent class, here you have request because it come from a form sent by user
        user = super().save(request)
        
        # Associate the additional email address with the user's account
        if email2 := self.cleaned_data.get('email2'):
            EmailAddress.objects.create(user=user, email=email2, verified=True, primary=False)

        return user

class CustomUserForm(UserForm):
    email2 = forms.EmailField(required=False)

    def save(self):
        # call super save from parent class
        user = super().save()

        # Associate the additional email address with the user's account
        if email2 := self.cleaned_data.get('email2'):
            EmailAddress.objects.create(user=user, email=email2, verified=True, primary=False)

        return user

Как вы понимаете: используйте CustomSignupForm на странице регистрации и CustomUserForm, когда вы хотите редактировать профиль пользователя. Обратите внимание, что я передал Verified = True, потому что пользователь уже зарегистрирован, но я думаю, что вам нужно повторно подтвердить это новое электронное письмо. Я поставил первичный = False, чтобы добавить это электронное письмо в качестве вторичного. Но это зависит от вас.

Ваш ответ подходит, и на мой вопрос был дан ответ. Я изо всех сил пытался добавить адрес электронной почты в пользовательскую модель coustam, но это было неправильно. Я должен был зарегистрировать адрес электронной почты в таблице account_emailaddress, чтобы управлять им! Большое спасибо.

Mari 17.04.2023 03:02

Другие вопросы по теме