Александр Горбач


программирование, админство

Регистронезависимый логин в django

без комментариев

По моему мнению логины на сайте должны быть регистронезависимыми, так как регистрация на одном сайте пользователей с логином «Django» и «django» может привести к неприятным конфузам. Будем отучать джанго от этого.

Для того, чтобы логины в стали регистронезависимыми подключим в наше проект бэкенд аутентификации (AUTHENTICATION_BACKEND). Следующий класс поместим согласно идеологии Django в отдельный файл backends.py рядом с определениями моделей, представлений и т.п (models.py, views.py). Импортируем модули

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User

И, собственно, код который осуществляет проверку логина в независимости от регистра.

class CaseInsensitiveModelBackend(ModelBackend):
  """
  По умолчанию ModelBackend чувствителен к регистру  _sensitive_ логина пользователя, 
  что нам и не нравится. Этот бэкенд поддерживает регистронезависимую авторизацию.
  """
  def authenticate(self, username=None, password=None):
    try:
      user = User.objects.get(username__iexact=username)
      if user.check_password(password):
        return user
      else:
        return None
    except User.DoesNotExist:
      return None

Затем редактируем settings.py и добавляем наш код в обработчик авторизации.

AUTHENTICATION_BACKENDS = ('myproject.myapp.backends.CaseInsensitiveModelBackend',)

Вот, собственно и всё что нам нужно. Теперь наши логины регистронезависимы!
P.S. код взят с http://blog.shopfiber.com/?p=220

Автор Sash(k)a

Июль 24th, 2012 at 11:38 пп

Оставьте комментарий

Яндекс.Метрика