Как сделать авторизацию в Django только по логину (без пароля)?
Нужно в Django сделать возможность авторизации пользователей (включая и админа) по коду доступа (логину).
Возможно ли это?
Сразу скажу, авторизация через социальные сети (django-social-auth) не подойдет.
Думаю что да. Напишите свой authentication-backend и добавьте его в AUTHENTICATION_BACKENDS в settings.py. Ещё наверно надо будет форму входа поднастроить. Вам надо и в админку входить только по логину ?
нет, authenticate() и login()трогать не надо. Пример бэкенда можно глянуть по ссылке что я привёл а так же в исходниках джанги. По сути бэкенд получает на вход идентификатор, например для варианта по умолчанию это login и password и возвращает объект user если таковой существует либо не возвращает ничего. Функция authenticate перебирает по списку бэкенды пока один из них не вернёт объект user.
По ссылке не совсем понял. Тогда получается, что бэкенд для обычных пользователей надо будет писать с нуля, т.е. встроенную админку уже нельзя будет использовать?
Еще такая мысль: а что, если ничего нового не писать, оставить стандартную модель как есть, всем пользователям дать одинаковые пароли (их ограниченное количество, около 70, регистрации нет, вводятся вручную), и в форме авторизации сделать hidden-поле с заранее введенным паролем? Нестандартно как-то, но все же, не прокатит?
https://dl.dropboxusercontent.com/u/9133112/forums... Смотрите файл src/apps/main/auth_backends.py и settings.py последние строки. Взял джанговский ModelBackend и просто убрал проверку пароля. Этого будет достаточно если у вас на сайте будет форма входа с одним полем - username, для входа в админку сейчас в поле пароль надо хоть что то написать. Из доков вроде ясно что это поправимо, но пока я сам не разобрался как это сделать. Самому стало интересно разобраться, если получится отпишусь.
Я тут подумал, можно просто переопределить шаблон admin/login.html добавив туда немного js кода который скрывает поле c паролем и запихивает в него какую-нибудь белиберду при входе. То есть ещё раз: 1. Пишем backand который работает только по логину. 2. Переопределяем шаблон входа дописываю туда дополнительный javascript блок. Всё работает как надо.
Шаблон же не надо в таком случае переопределять? Еще, мне нужно форму авторизации разместить только на главной странице сайта, а не по адресу domen.ru/admin/