Frage

Gibt es in Django eine Möglichkeit, sich mit den angegebenen Anmeldeinformationen anzumelden, während auf eine Ansicht in der Anwendung zugegriffen wird?

Meine Motivation hier ist die Verfügbarkeitsüberwachung mit einem Dienst wie Pingdom.Die meisten URLs, deren Verfügbarkeit ich überprüfen möchte, sind mit einem verziert @login_required was den Zugriff unmöglich macht, es sei denn, ich habe mich zuvor angemeldet.

Meine Ideenlösung wird eine Möglichkeit sein, auf meine Ansichten zuzugreifen, während Anmeldeinformationen in GET- oder POST-Parametern angegeben werden.Eine andere Alternative könnte wahrscheinlich ein Site-Uptime-Überwachungsdienst sein, der das Anmelden und Abrufen einer Sitzung vor dem Zugriff auf die betreffende URL unterstützt.

Update

Danke an @Filip Dupanovićs Anweisung und den Code von hier meine einfach funktionierende Middleware sieht so aus:

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)

Ich habe den auslösenden Parameter hinzugefügt authenticateEverywhere um mögliche Konflikte mit Ansichten zu vermeiden, die möglicherweise verwendet werden username oder password Rahmenbedingungen.

War es hilfreich?

Lösung

Das kannst du ganz sicher!Sie müssen eine benutzerdefinierte schreiben middleware-Klasse das implementiert eine benutzerdefinierte process_request methode, mit der Sie das Anforderungsobjekt überprüfen, die Anmeldeinformationen abrufen und den Benutzer anmelden können, bevor die Anforderung an eine Ansicht weitergeleitet wird, die mit dekoriert ist login_required.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top