Django предоставляет учетные данные для входа в любой URL-адрес просмотра

StackOverflow https://stackoverflow.com//questions/12665721

  •  11-12-2019
  •  | 
  •  

Вопрос

Есть ли в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top