Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2010 16:37:52

isergey
От:
Зарегистрирован: 2010-07-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Нестандартная аутентификация

Здравствуйте!
Задача академического характера, дабы разобраться с механизмом аутентификации и возможностью его расширения.
И так задача: пользователи хранятся в текстовых файлах, у пользователей есть группы. Необходимо на основе этой информации обеспечить доступ на сайт под управлением django.

Значит так. Бэкенд аутентификации я написал, т.е. создал класс, в котором есть метод authenticate, читающий логин пароль из файла и, в случае успеха, возвращающий объект from django.contrib.auth.models.User

В представлении использую его так

from django.contrib.auth import authenticate, login
...
user = authenticate(username=username, password=password)
if user.is_authenticated():
auth.login(request, user)
Вроде всё по науке, но когда я делаю auth.login(request, user) вываливается исключение:
Exception Type:	IntegrityError
Exception Value: дублирующее значение ключа нарушает условие уникальности "auth_user_username_key"
Exception Location: C:\Python26\lib\site-packages\django\db\backends\postgresql_psycopg2\base.py in execute, line 44
Я так понимаю, все эти движения завязаны на базе.

В общем остаются открытыми следующие вопросы:
1) Как сделать логин (нужно ли мне добавлять информацию о пользователе в базу?)
2) Что делать с группами (они у меня хранятся так де в текстовых файлах)

PS. Расскажу как такая проблема решается во фреймворке Yii.
Там есть базовый класс интерфейс WebUser, у которого есть методы login logout, getGroups итд, в общем реализующий базовый функционал веб пользователя. Далее, на основании этого интерфейса строятся бэкенды - классы, реализующие этот интерфейс. Т.е. есть DBWebUser итд, можно написать свой класс TextUser. Далее, этот класс указывается в настройках приложения и вызывается им. В итоге, объект WebUser храниться в переменной приложения Yii::user. На мой взгляд довольно таки удобно.

PS2. Покурил исходники, и понял, что аутентификация завязана на пользователе из базы (т.е. нужно добавлять пользователя из внешнего источника). По-моему это туповато и не гибко для веб фреймворка. Мне сейчас нужно изобретать велосипед?



Офлайн

#2 Ноя. 17, 2010 11:13:05

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Нестандартная аутентификация

почитай это –> http://docs.djangoproject.com/en/dev/howto/apache-auth/
попробуй переопределить свою мидлварю вместо django.contrib.auth.middleware.AuthenticationMiddleware

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version