Django che fornisce le credenziali di accesso in qualsiasi URL di visualizzazione
Domanda
C'è un modo in Django per eseguire il login utilizzando le credenziali fornite durante l'accesso a qualsiasi vista nell'applicazione?
La mia motivazione qui è il monitoraggio delle disponibilità utilizzando un servizio come Pingdom . La maggior parte degli URL che voglio convalidava la loro disponibilità è decorata con un @login_required
che rende impossibile accedere a meno che non abbia effettuato l'accesso in precedenza.
La mia soluzione IDEA sarà un modo per accedere alle mie opinioni fornendo alle credenziali nei parametri OTTIENI o POST. Un'altra alternativa potrebbe probabilmente essere un servizio di monitoraggio del tempo di uptime del sito che supporta la registrazione e l'acquisizione di una sessione prima di accedere all'URL in questione.
Aggiornamento
Grazie alla direzione di @filip dupanović e al codice da Qui Il mio semplice middleware funzionante è simile a questo:
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)
.
Ho aggiunto il parametro di trigger authenticateEverywhere
per evitare che eventuali scontri possibili con viste che potrebbero utilizzare i parametri username
o password
.
Soluzione
Sicuramente puoi!Avrai bisogno di scrivere un personalizzato Class Middleware Ciò implementa un metodo process_request
personalizzato in cui sarai in grado di ispezionare l'oggetto Richiedi, ottenere le credenziali e firmare l'utente prima che la richiesta venga indirizzata a una vista decorata con login_required
.