From 019c7a191a192cb27e13c1888e1521ceb5b9634f Mon Sep 17 00:00:00 2001 From: Walter Date: Fri, 21 Feb 2025 04:46:36 +0100 Subject: [PATCH] progress towards fixing login backend --- .../migrations/0025_alter_level_title.py | 18 ++++++++++++++++ app/settings/settings.py | 3 +++ app/users/backends.py | 21 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 app/bloonsa_game/migrations/0025_alter_level_title.py create mode 100644 app/users/backends.py diff --git a/app/bloonsa_game/migrations/0025_alter_level_title.py b/app/bloonsa_game/migrations/0025_alter_level_title.py new file mode 100644 index 0000000..d5c0758 --- /dev/null +++ b/app/bloonsa_game/migrations/0025_alter_level_title.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.6 on 2025-02-21 03:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bloonsa_game', '0024_config'), + ] + + operations = [ + migrations.AlterField( + model_name='level', + name='title', + field=models.CharField(max_length=64), + ), + ] diff --git a/app/settings/settings.py b/app/settings/settings.py index dc265a3..b1c0ea1 100644 --- a/app/settings/settings.py +++ b/app/settings/settings.py @@ -123,6 +123,9 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] +AUTHENTICATION_BACKENDS = ( + "users.backends.CaseInsensitiveModelBackend", # inherits from 'django.contrib.auth.backends.ModelBackend' +) # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ diff --git a/app/users/backends.py b/app/users/backends.py new file mode 100644 index 0000000..4353671 --- /dev/null +++ b/app/users/backends.py @@ -0,0 +1,21 @@ +from django.contrib.auth.backends import ModelBackend +from django.contrib.auth import get_user_model + +from users.models import User + +class CaseInsensitiveModelBackend(ModelBackend): + def authenticate(self, username=None, password=None, **kwargs): + UserModel = get_user_model() + if username is None: + username = kwargs.get(UserModel.USERNAME_FIELD) + try: + d = {'%s__iexact'%UserModel.USERNAME_FIELD: username} + user = UserModel.objects.get(**d) + if user.check_password(password): + return user + except UserModel.DoesNotExist: + # Run the default password hasher once to reduce the timing + # difference between an existing and a non-existing user (#20760). + UserModel().set_password(password) + + return None