Django предоставляет учетные данные для входа в любой URL-адрес просмотра
Вопрос
Есть ли в django способ выполнить вход в систему с использованием учетных данных, предоставленных при доступе к любому представлению в приложении?
Моя мотивация здесь — мониторинг доступности с помощью такого сервиса, как Пингдом.Большинство URL-адресов, доступность которых я хочу проверить, украшены значком @login_required
что делает невозможным доступ, если я предварительно не вошел в систему.
Моей идеей будет способ получить доступ к моим представлениям при предоставлении учетных данных в параметрах GET или POST.Другой альтернативой, вероятно, может быть служба мониторинга работоспособности сайта, которая поддерживает вход в систему и получение сеанса перед доступом к соответствующему URL-адресу.
Обновлять
Благодаря руководству @Filip Dupanović и коду из здесь мое простое рабочее промежуточное программное обеспечение выглядит так:
from django.contrib.auth import authenticate, login
class AuthenticationEverywhereMiddleware(object):
"""
Middleware to allow logging in by supplying login credentials in any URL
"""
def process_request(self, request):
if (request.GET.get('authenticateEverywhere','') == 'GET'):
username = request.GET['username']
password = request.GET['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
Я добавил параметр запуска authenticateEverywhere
чтобы предотвратить любые возможные столкновения с представлениями, которые могут использовать username
или password
параметры.
Решение
Вы наверняка можете!Вам нужно будет написать собственный класс промежуточного программного обеспечения который реализует пользовательский process_request
метод, в котором вы сможете проверить объект запроса, получить учетные данные и войти в систему пользователя, прежде чем запрос будет перенаправлен в представление, украшенное login_required
.