Pergunta

Existe alguma maneira no Django de realizar login usando as credenciais fornecidas ao acessar qualquer view na aplicação?

Minha motivação aqui é o monitoramento de disponibilidade usando um serviço como Pingdom.A maioria dos URLs que desejo validar sua disponibilidade são decorados com um @login_required o que torna impossível o acesso, a menos que eu tenha feito login anteriormente.

Minha solução ideal será uma forma de acessar minhas visualizações enquanto fornece credenciais nos parâmetros GET ou POST.Outra alternativa provavelmente poderia ser um serviço de monitoramento de tempo de atividade do site que suporte o login e a aquisição de uma sessão antes de acessar o URL em questão.

Atualizar

Graças à direção de @Filip Dupanović e ao código de aqui meu middleware simples de trabalho é assim:

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)

Eu adicionei o parâmetro de disparo authenticateEverywhere para evitar possíveis conflitos com visualizações que possam usar username ou password parâmetros.

Foi útil?

Solução

Você certamente pode!Você precisará escrever um costume classe de middleware que implementa um costume process_request método onde você poderá inspecionar o objeto da solicitação, obter as credenciais e conectar o usuário antes que a solicitação seja roteada para uma visualização decorada com login_required.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top