Альтернативная аутентификация Django - PullRequest
2 голосов
/ 05 апреля 2010

Необходимо интегрировать Django с существующей системой аутентификации. У этой системы есть своя собственная база данных, API, вход / выход, редактирование веб-страниц профиля и cookie.

(возможно, мне придется добавить несколько дополнительных полей профиля, сохраненных / обновленных локально)

Каков правильный подход к замене встроенной аутентификации в Django?

Ответы [ 3 ]

2 голосов
/ 05 апреля 2010

Я создал пользовательский бэкэнд аутентификации, когда мне нужно было сделать что-то похожее на то, что вы должны сделать. Смотри: http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

В функции authenticate вы вызываете ваш API для аутентификации пользователя, а затем сопоставляете их с объектом django.contrib.auth.model.User на каком-то первичном ключе, например, на имени пользователя. Если первичный ключ отличается от имени пользователя, я обычно создаю объект сопоставления или помещаю его в объект профиля для проекта.

2 голосов
/ 06 апреля 2010

Правильный подход к замене аутентификации из готового django на ваш собственный состоит в замене ваших классов в кортеже AUTHENTICATION_BACKENDS в settings.py, как описано в http://docs.djangoproject.com/en/dev/topics/auth/#specifying-authentication-backends. Это невероятно полезно для только проблема, которую вы описываете.

Хорошим примером серверной аутентификации, выполненной таким образом, является django-cas . Это использует CAS для аутентификации в приложении django. Вы можете использовать это в качестве шаблона и просто одинаково записывать хуки в вашу собственную систему аутентификации.

НТН

0 голосов
/ 05 апреля 2010

Это зависит от того, как вы хотите решить проблему. Если вам не нужно продолжать работу существующей системы, лучше всего импортировать их данные в проект django.

Если система аутентификации должна оставаться в такте, вам, возможно, придется написать оболочку для django.auth. Я делал это в прошлом, используя SQLAlchemy http://www.sqlalchemy.org для интеграции с внешней базой данных.

Может быть полезно взглянуть на поддержку multi-db в Django 1.2 http://djangoadvent.com/1.2/multiple-database-support

В любом случае я бы попытался получить информацию о пользователе в django.auth, а не написать собственную систему аутентификации.

...