Question

Existe-t-il un moyen dans Django d'effectuer une connexion à l'aide des informations d'identification fournies lors de l'accès à n'importe quelle vue de l'application ?

Ma motivation ici est la surveillance de la disponibilité à l'aide d'un service tel que Pingdom.La plupart des url dont je souhaite valider leur disponibilité sont agrémentées d'un @login_required ce qui rend impossible l'accès à moins que je sois préalablement connecté.

Mon idée de solution sera un moyen d'accéder à mes points de vue tout en fournissant des informations d'identification dans les paramètres GET ou POST.Une autre alternative pourrait probablement être un service de surveillance de la disponibilité du site qui prend en charge la connexion et l'acquisition d'une session avant d'accéder à l'URL en question.

Mise à jour

Merci à la direction de @Filip Dupanović et au code de ici mon middleware de travail simple ressemble à ceci :

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)

J'ai ajouté le paramètre de déclenchement authenticateEverywhere pour éviter tout conflit possible avec des vues qui pourraient utiliser username ou password paramètres.

Était-ce utile?

La solution

Vous le pouvez certainement !Vous devrez écrire une coutume classe de middleware qui implémente une coutume process_request méthode où vous pourrez inspecter l'objet de requête, obtenir les informations d'identification et connecter l'utilisateur avant que la requête ne soit acheminée vers une vue décorée avec login_required.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top