У меня есть проект django с приложением django-allauth. Я хочу пройти аутентификацию по имени пользователя или электронной почте A или электронной почте B.
Я установил ACCOUNT_AUTHENTICATION_METHOD на username_email и Я подтвердил, что могу пройти аутентификацию по имени пользователя или адресу электронной почты.
Читая документацию, похоже, что я могу использовать ACCOUNT_MAX_EMAIL_ADDRESSES, но я не знаю, как его использовать.
документация django-allauth:
ACCOUNT_MAX_EMAIL_ADDRESSES(=нет) Максимальное количество адресов электронной почты, которые пользователь может связать со своей учетной записью. Этот параметр можно безопасно изменить для уже запущенного проекта — это не повлияет негативно на пользователей, которые уже превышают разрешенную сумму. Обратите внимание, что если вы установите максимальное значение 1, пользователи не смогут изменить свой адрес электронной почты, поскольку они не могут добавить новый адрес, с последующим удалением старого адреса.
Я новичок в django и борюсь с этим. Может ли кто-нибудь привести пример?





Привет Мари и добро пожаловать в страну чудес Джанго.
Я работал с 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, чтобы управлять им! Большое спасибо.