Сделал трек авторизации Django по электронной почте, как связать поле имени пользователя с электронной почтой? - PullRequest
4 голосов
/ 02 августа 2010

Хотя мой оригинал заключался в том, чтобы при создании учетных записей просто указывать адрес электронной почты в полях имени пользователя и адреса электронной почты, это не работает, поскольку Django ограничивает поле имени пользователя 30 символами, которых может быть недостаточно для адресов электронной почты.

Моя вторая мысль заключалась в том, чтобы md5 адрес электронной почты, поместить хэш в имя пользователя, и это сделало бы его всегда уникальным (и технически идентичным полю электронной почты). md5 - это 32 символа, опять же, у меня есть только 30 символов для работы.

Моя третья мысль заключалась в том, чтобы вырезать последние два символа из конца хеша md5, сделать его равным 30, а затем использовать его, как я планировал, использовать его с полным хешем. Но я не знаю, каковы шансы получить два хэша, которые идентичны до 30-го символа и различаются только в 31 и 32, которые я отрубил.

Есть ли лучший способ связать содержимое поля имени пользователя с адресом электронной почты таким образом, чтобы он всегда был уникальным?

1 Ответ

4 голосов
/ 02 августа 2010

Мы разработали приложение django, которое хранит электронные письма как имена пользователей. Встроенная в Django модель имени пользователя ограничена 30 символами, что было хорошо на 90%.

Для поддержки более длинных имен пользователей, без изменения источника django, мы использовали крошечное дополнительное приложение под названием long_username:

from django.db.models.signals import class_prepared

def longer_username(sender, *args, **kwargs):
    # You can't just do `if sender == django.contrib.auth.models.User`
    # because you would have to import the model
    # You have to test using __name__ and __module__
    if sender.__name__ == "User" and sender.__module__ == \
        "django.contrib.auth.models":
        sender._meta.get_field("username").max_length = 75

class_prepared.connect(longer_username)

Мы добавили это как первое приложение в INSTALLED_APPS:

INSTALLED_APPS = (
    'longer_username',
    ...
)

Вот и все. Более подробную информацию можно найти здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...