2013-03-31 4 views
1

В настоящее время я разрабатываю инструмент в Python с помощью Django, в котором мне нужно импортировать существующую базу данных пользователей. Очевидно, что пароль для этих существующих пользователей не имеет того же шифрования, что и шифрование паролей по умолчанию, используемое Django.Django Override password encryption

Я хочу переопределить шифрование для метода пароля, чтобы мои пароли не были изменены. Я не нашел, как переопределить существующий метод в документации, просто нашел, как добавить информацию о пользователе (я не нахожу, как удалить информацию - например, имя или фамилию - о пользователе либо, так что, если кто-то знает, скажите Я пожалуйста).

Благодарим за помощь.

+0

Проверьте https://docs.djangoproject.com/en/1.5/topics/auth/passwords/ для Django 1.5; https://docs.djangoproject.com/en/1.4/topics/auth/#how-django-stores-passwords для Django 1.4. Вам нужно предоставить настраиваемый хешер и настроить его в настройках. – okm

ответ

2

В Django аутентификация пользователя не выполняется в самой модели пользователя. Django использует другие модули для этого. В вашем случае вы можете создать свой собственный модуль для проверки пароля и добавить его в свой settings.py (docs).

Одна хорошая вещь о Django заключается в том, что вы можете предоставить несколько этих хэстеров, чтобы сделать это auth. Допустим, ваш текущий хеш-метод не так безопасен, как некоторые из методов Django. Затем, если вы добавите свой пользовательский хэшер в начало PASSWORD_HASHERS, может случиться следующее. Если пароль пользователя, который пытается войти в систему, хранится с использованием вашего настраиваемого метода, Django попробует первый хешер, и он потерпит неудачу. Затем он попробует остальные хеши, и все они потерпят неудачу, кроме вашего пользовательского хашера. Однако, поскольку пользователь успешно аутентифицирован, и поскольку успешный хэшер не является первым хэшером, тогда Django автоматически перефразирует пароль, используя первый определенный хэш. Таким образом, вы можете изящно перейти на более безопасный алгоритм хеширования для паролей, поскольку пользователи продолжают регистрироваться.

Также, если вы переносите текущую базу данных, а таблица пользователей не соответствует модели пользователя Django, имейте в виду, что запуск с Django 1.5 вы можете определить свою собственную модель User вместо Django.

+0

Спасибо, это прекрасно! :-) –

0

Пересмотреть свое решение о сохранении хэшей старого пароля.

ЗА ИСКЛЮЧЕНИЕМ, если вы уже использовали для них очень современную и прочную схему (например, pbkdf2, bcrypt. ShaXXX_crypt) - и НЕ только какой-то (соленый или нет) sha1-хэш.

Я знаю, что заманчиво просто оставаться совместимым и поддерживать старое дерьмо, но эти старые (соленые или несоленые, не имеют большого значения для грубой форсировки) sha1-хеши могут быть разрушены в настоящее время со скоростью> 1 * 10^9 догадок в секунду.

Кроме того, требования к минимальной длине старого пароля могут потребовать пересмотра по тем же причинам.

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