Вовремя обнаружил, что стандартная авторизация по username
не регистронезависимая.
Относительно малой кровью, вроде как, получилось исправить это так:
(в коде есть и бэкенд авторизации по мылу, может кому пригодиться)
backends.py
from django.contrib.auth.hashers import check_password
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
class UserModelEmailBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
usermodel = get_user_model()
try:
user = usermodel.objects.get(email__iexact=username)
if check_password(password, user.password):
return user
else:
return None
except usermodel.DoesNotExist:
return None
except usermodel.MultipleObjectsReturned:
users = usermodel.objects.filter(email__iexact=username)
for user in users:
if check_password(password, user.password):
return user
return None
class CaseInsensitiveModelBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
usermodel = get_user_model()
try:
user = usermodel.objects.get(username__iexact=username)
if user.check_password(password):
return user
else:
return None
except usermodel.DoesNotExist:
return None
except usermodel.MultipleObjectsReturned:
users = usermodel.objects.filter(username__iexact=username)
for user in users:
if check_password(password, user.password):
return user
return None
Файл backends.py кладем радом с settings.py проекта.
В settings.py добавляем:
AUTHENTICATION_BACKENDS = [
'имя_проекта.backends.UserModelEmailBackend',
'имя_проекта.backends.CaseInsensitiveModelBackend',
]
Что мы получили:
1. Можем авторизоваться как по юзернайму так и по мылу.
2. При вводе логина регистр не важен.
3. В БД могут быть пользователи, например, с такими именами: Evg и evg. Определяться кто же все-таки авторизуется будет, в этом случае, по паролю.
4. Аналогично и с мылом, только еще у пользователей может быть и абсолютно одинаковое мыло. В этом случае, так же, пароль "установит" корректного пользователя.
Пока на 100%% не уверен, что не напорюсь впоследствии на какие-нибудь "подводные камни" (побыстрому проверил - вроде работает, основательно буду тестить вечером). Тема регистрации/авторизации оказывается не так проста :) Это подтверждает множество веток, которые появляются в последнее время на этом форуме.
Если кто чего подскажет полезного, относительно кода выше, буду благодарен.