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

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

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

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

Ответы [ 2 ]

5 голосов
/ 09 марта 2010

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

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

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

2 голосов
/ 09 марта 2010

Написать пользовательский аутентификационный бэкэнд:

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

...