Django: Как я могу реализовать низкоуровневый вход в систему, используя столбец пароля md5, поскольку я переношу свою таблицу пользователей со старого сайта?

По сути, в настоящее время у меня есть login/ в urls.py перенаправлении на django.contrib.auth.views.login, и это, кажется, работает нормально.

Однако я переношу пароли с устаревшего сайта mysql/php и считаю, что должен просто создать новый профиль модели на http://docs.djangoproject.com/en/dev/topics/auth/#хранениедополнительнойинформацииопользователях»rel=. Эта новая модель/таблица будет иметь старый столбец пароля md5, и я перенесу имена пользователей в основную таблицу пользователей.

Как я могу изменить метод входа в систему, чтобы сначала проверить, есть ли у пользователя пароль в таблице auth_user, а если нет, то md5 в поле POST password и попытаться сопоставить его с моим новым столбцом пароля профиля, если это так, сохраните пароль в новая таблица auth_user с шифрованием SHA1, как это делает администратор?


person meder omuraliev    schedule 09.03.2010    source источник


Ответы (2)


Я бы создал новое представление, которое делает что-то следующее:

from django.contrib.auth.models import User, check_password
import hashlib

def login_with_lookup(request):
    if request.POST: # If you want to restrict to POST
        username = request.POST['username']
        password = request.POST['password']
        user = User.objects.get(username=username)
        profile = user.get_profile()
        if profile.old_password != '' and profile.old_password == hashlib.md5(password).hexdigest():
            user.set_password(password)
            profile.old_password = ''
            user.save() # Might need to save profile as well, not sure how it works
        if check_password(password, user.password):
            login(request, user)
    #Whatever else you want to do, followed by a render to template or redirect

Это не проверено, поэтому потребуется небольшая очистка. Также потребуется проверка ошибок в разных точках для обработки случаев сбоя (этот пример предполагает успех).

person Adam    schedule 09.03.2010

Напишите собственный сервер аутентификации:

http://docs.djangoproject.com/en/1.1/topics/auth/#writing-an-authentication-backend

person Igor Sobreira    schedule 09.03.2010