eth0.pro

Linux is working. The future is open.



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

Поломав голову, я решил пойти по другому и, как оказалось, правильному пути! Думаю, многие знают про ./manage shell джанги. Вопрос стоял в том, как его получить из системы, к тому же если python в виртуальном окружении. Я нашел решение, заготовкой делюсь с Вами:

#!/usr/bin/env /var/django/env/my_project/bin/python
#coding:utf8
#
# Проверка пары логин-пароль пользователя, зарегистрированного в Django. 
# Логин и пароль передаются параметрами в прямом виде
#

import os
import sys

sys.path.append("/var/django/project/my_project")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")

from django.contrib.auth.models import User

username = sys.argv[1]
plainpass = sys.argv[2]

try:
        u = User.objects.get(username=username)
        if u.check_password(plainpass):
                sys.stdout.write("true")
        else:
                sys.stdout.write("false")
except:
        sys.stdout.write("false")

29 янв 2013 г. | Теги: Django Python