Найти - Пользователи
Полная версия: Нестандартная аутентификация
Начало » Django » Нестандартная аутентификация
1
isergey
Здравствуйте!
Задача академического характера, дабы разобраться с механизмом аутентификации и возможностью его расширения.
И так задача: пользователи хранятся в текстовых файлах, у пользователей есть группы. Необходимо на основе этой информации обеспечить доступ на сайт под управлением 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. Покурил исходники, и понял, что аутентификация завязана на пользователе из базы (т.е. нужно добавлять пользователя из внешнего источника). По-моему это туповато и не гибко для веб фреймворка. Мне сейчас нужно изобретать велосипед?
romankrv
почитай это –> http://docs.djangoproject.com/en/dev/howto/apache-auth/
попробуй переопределить свою мидлварю вместо django.contrib.auth.middleware.AuthenticationMiddleware
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB