django el suministro de credenciales de inicio de sesión en cualquier url de vista
Pregunta
¿Hay alguna forma en django para realizar el inicio de sesión usando las credenciales proporcionadas mientras que para acceder a cualquier punto de vista en la aplicación?
Mi motivación es la disponibilidad de vigilancia del uso de un servicio, tales como Pingdom.La mayoría de las direcciones url quiero validado su disponibilidad están decoradas con un @login_required
lo que hace imposible el acceso a menos que yo haya iniciado anteriormente.
Mi idea de la solución será una manera de acceder a mi punto de vista, mientras que el suministro de credenciales en los parámetros GET o POST.Otra alternativa podría ser, probablemente, un tiempo de actividad del sitio servicio de vigilancia que soporta el registro y la adquisición de una sesión antes de acceder a la URL en cuestión.
Actualización
Gracias a @Filip Dupanović la dirección y el código de aquí mi sencillo trabajo de middleware se parece a esto:
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)
He añadido el parámetro de disparo authenticateEverywhere
para evitar posibles enfrentamientos con vistas a que pueda utilizar username
o password
los parámetros.
Solución
Usted seguramente puede!Tendrás que escribir una costumbre middleware de la clase que implementa una costumbre process_request
método en el que usted será capaz de inspeccionar el objeto de solicitud, obtener las credenciales y firmar el usuario antes de que la solicitud se dirige a un punto de vista que es decorado con login_required
.