¿Los backends de autenticación personalizados de Django necesitan llevar una contraseña?
-
03-07-2019 - |
Pregunta
Así es como mi universidad maneja la autenticación: redirigimos al usuario a un sitio web, ingresamos su nombre de usuario y contraseña, luego nos redirigen a nosotros con el nombre de usuario y una clave de inicio de sesión ingresada en la cadena de consulta. Cuando recuperamos al usuario, llamamos a un procedimiento almacenado en la base de datos de la universidad que toma el nombre de usuario, la clave de inicio de sesión y la dirección IP y nos dice si esto es válido.
Tengo un backend de autenticación personalizado de Django configurado para manejar nuestro final de todo esto. ¿Hay alguna diferencia de una manera u otra si puedo aceptar un argumento de contraseña (ya que no estamos tomando su contraseña)? En este momento, lo tengo configurado para que tome la clave de inicio de sesión como el argumento de la contraseña. ¿Sería bueno, malo o ninguno de los dos cambiar esto para que tome esto como "login_key" en lugar de "password"?
Solución
Los documentos de Django dicen esto:
De cualquier manera, autenticar debe verificar las credenciales que recibe, y debería devolver un objeto de usuario que coincida esas credenciales, si las credenciales son validos. Si no son válidos, debe devolver ninguno.
El 'De cualquier manera' se refiere a si el método authenticate () toma una combinación de nombre de usuario / contraseña, o simplemente un token. Su escenario se encuentra entre esos dos, por lo que creo que la mejor respuesta sería escribir su authenticate () para tomar un nombre de usuario y una clave de inicio de sesión, y devolver el Usuario correcto o Ninguno según corresponda.