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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top