Django-allauth не смог войти в систему для существующего пользователя

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

  1. Имеет хорошо развитый рабочий процесс с функцией email opt-in
  2. .
  3. Поддерживает аутентификацию как по имени пользователя, так и по электронной почте.

Вот мои настройки, связанные с библиотекой:

# django-allauth specific settings for regular accounts not including the social authentication part.
ACCOUNT_AUTHENTICATION_METHOD="username_email"
ACCOUNT_CHANGE_EMAIL=True
ACCOUNT_CONFIRM_EMAIL_ON_GET=False
ACCOUNT_EMAIL_REQUIRED=True
ACCOUNT_EMAIL_VERIFICATION="mandatory"
ACCOUNT_UNIQUE_EMAIL=True
ACCOUNT_DEFAULT_HTTP_PROTOCOL="https"
ACCOUNT_MAX_EMAIL_ADDRESSES=2
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE=True
ACCOUNT_LOGIN_ON_PASSWORD_RESET=True
ACCOUNT_SESSION_REMEMBER=True
ACCOUNT_USERNAME_REQUIRED=False
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE=False
# Our specific signup and login forms with special styling 
ACCOUNT_FORMS = {'signup': 'user_profile.forms.CustomSignupForm',
                 'login': 'user_profile.forms.CustomLoginForm'}

Единственная роль CustomLoginForm заключается в том, чтобы иметь настроенный css:

from allauth.account.forms import LoginForm

class CustomLoginForm(LoginForm):

    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        # The parent class does similar. The only reason we had to make custom loginform
        # to handle bootstrap css
        self.fields["login"].widget.attrs.update({"class": TEXT_INPUT_CLASS})
        if app_settings.AuthenticationMethod  == AuthenticationMethod.USERNAME:
            self.fields["login"].widget.attrs.update({"placeholder": "Felhasználónév",
                                                      "autocomplete": "username"})
        elif app_settings.AuthenticationMethod  == AuthenticationMethod.EMAIL:
            self.fields["login"].widget.attrs.update({"placeholder": "Email cím",
                                                      "autocomplete": "email"})
        else:
            self.fields["login"].widget.attrs.update({"placeholder": "Email cím / felhasználónév",
                                                      "autocomplete": "email"})

        self.fields["password"].widget.attrs.update({"class": TEXT_INPUT_CLASS,
                                                     "placeholder": "Add meg a jelszavad",
                                                     "autocomplete": "password"})

Когда я запускаю свой сервер разработки, чтобы узнать, почему я не могу войти в систему с существующим именем пользователя и паролем, я использовал панель инструментов отладки, чтобы увидеть SQLS, созданные ORM:

SELECT "auth_user"."id",
       "auth_user"."password",
       "auth_user"."last_login",
       "auth_user"."is_superuser",
       "auth_user"."username",
       "auth_user"."first_name",
       "auth_user"."last_name",
       "auth_user"."email",
       "auth_user"."is_staff",
       "auth_user"."is_active",
       "auth_user"."date_joined"
  FROM "auth_user"
 WHERE "auth_user"."username" = '''1@example.com'''
 LIMIT 21

SELECT "account_emailaddress"."id",
       "account_emailaddress"."user_id",
       "account_emailaddress"."email",
       "account_emailaddress"."verified",
       "account_emailaddress"."primary"
  FROM "account_emailaddress"
 WHERE "account_emailaddress"."email" LIKE '''1@example.com''' ESCAPE '\'

    
SELECT "auth_user"."id",
       "auth_user"."password",
       "auth_user"."last_login",
       "auth_user"."is_superuser",
       "auth_user"."username",
       "auth_user"."first_name",
       "auth_user"."last_name",
       "auth_user"."email",
       "auth_user"."is_staff",
       "auth_user"."is_active",
       "auth_user"."date_joined"
  FROM "auth_user"
 WHERE "auth_user"."id" IN ('4')

SELECT "auth_user"."id",
       "auth_user"."password",
       "auth_user"."last_login",
       "auth_user"."is_superuser",
       "auth_user"."username",
       "auth_user"."first_name",
       "auth_user"."last_name",
       "auth_user"."email",
       "auth_user"."is_staff",
       "auth_user"."is_active",
       "auth_user"."date_joined"
  FROM "auth_user"
 WHERE "auth_user"."username" LIKE '''1@example.com''' ESCAPE '\'
 LIMIT 21

Поскольку пользователи могут входить в систему по имени пользователя или электронной почте, вполне разумно видеть несколько запросов. Единственное, что мне непонятно, - почему строковые литералы в условиях where окружены 4 дополнительными кавычками?

Если я убираю лишние кавычки, запрос выдает совпадающего пользователя в браузере Sqlite. Если не удалять лишние кавычки, то не выдает.

Какой код ставит лишние кавычки и почему? Как это можно исправить?

Вернуться на верх