Django fournissant des informations de connexion dans n'importe quelle URL de vue
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.
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
.