Django-allauth застрял на регистрации и запутался в headless=True

Я пытаюсь настроить приложение django-allauth, чтобы оно использовалось для аутентификации во фронт-энде react app и мобильном приложении. Есть некоторые несоответствия, которые, скорее всего, просто из-за того, что я не разобрался в чем-то. Но тонны гугления и AI не помогают.

Я выполнил настройку (несколько раз) в соответствии с руководством и с помощью postman, и я смог успешно вызвать /auth/login для пользователя, который был создан с помощью createsuperuser

Моя путаница/неуверенность начинается, когда я пытаюсь зарегистрировать нового пользователя через /auth/signup. Это «вроде как» успешно. Я говорю «как бы», потому что пользователь действительно создается в БД, но я не получаю электронного письма с просьбой Confirm Their Email.

Однако, когда я пытаюсь зарегистрировать тот же email/пользователя снова, я получаю письмо с текстом [example.com] Account Already Exists. Таким образом, я знаю, что доставка электронной почты (с помощью mailhog) работает.

Вот мои настройки allaluth:

HEADLESS_ONLY = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_LOGIN_METHODS = {
    "email",
}
ACCOUNT_SIGNUP_FIELDS = ["email*", "password1*",]
ACCOUNT_SIGNUP_FORM_CLASS = "authy.forms.CustomSignupForm"
ACCOUNT_EMAIL_VERIFICATION = "mandatory"  # Ensures users must verify their email
ACCOUNT_EMAIL_VERIFICATION_BY_CODE_ENABLED = True
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = None # or a url
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = None # or a url
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 3

У меня есть форма регистрации, как показано ниже:

class CustomSignupForm(forms.Form):
    email = forms.CharField(required=True, label="Email Address")
    mobile_number = forms.CharField(max_length=20, required=True, label="Mobile Number")
    first_name = forms.CharField(max_length=50, required=True, label="First Name")
    last_name = forms.CharField(max_length=50, required=True, label="Last Name")

    def signup(self, request, user):
        """This method is automatically called by AllAuth after signup.
        """
        user.mobile_number = self.cleaned_data["mobile_number"]
        user.save()

HEADLESS = TRUE

Описанный выше сценарий - это когда у меня есть headless = False.

Учитывая, что я создаю Django API, который будет использоваться react front end, я предположил, что мне нужно установить headless = True. Однако если я это сделаю, то обнаружу, что при первом создании пользователя с помощью auth/signup я получаю сообщение 401 и следующие подробности. I still DON'T get an email.

{
    "status": 401,
    "data": {
        "flows": [
            {
                "id": "login"
            },
            {
                "id": "signup"
            }
        ]
    },
    "meta": {
        "is_authenticated": false,
        "session_token": "m18gi8fso3hj75l7ogrhv47bn45jqcap"
    }
}

Если я пытаюсь зарегистрировать те же данные снова, я получаю ошибку Reverse for 'account_signup' not found. 'account_signup' is not a valid view function or pattern name. Гугление этой ошибки показывает, что это потому, что у меня нет path("accounts/", include("allauth.urls")), в urls.py. Но, насколько я понимаю, в headless такие URL не ожидаются?

Я также заметил, что когда пользователь регистрируется, все поля в форме автоматически сохраняются, кроме mobile_number. Поэтому мне приходится явно назначать его экземпляру пользователя и сохранять (обновлять). Что я упускаю?

Подводя итог моему непониманию:

  1. Пользователь создается, но письмо не отправляется. Однако, когда я снова отправляю эту полезную нагрузку, я могу получить электронное письмо? Есть ли какая-то настройка, которую я не включил?
  2. Почему я получаю ошибку о account_signup not found, но когда я устанавливаю headless = True, эти API даже не отображаются, когда я делаю python manage.py show_url (используя djang-extensions)? В каком-то потоке/выпуске/reddit/ai, кажется, говорилось, что при использовании headless = True мы не можем воспользоваться автоматической рассылкой писем и другими подобными функциями. Что мы должны создавать их самостоятельно? Я сомневаюсь в этом, но, следовательно, причина этого вопроса здесь.
  3. Почему mobile_number не сохраняется автоматически, как все остальные поля? Должен ли я вообще использовать пользовательскую форму, когда headless = True или я должен построить все мои API, используя DRF Views и Serialilzers? Обратите внимание, что mobile_number - это поле в существующей пользовательской модели пользователя
  4. .
Вернуться на верх