onauthenticationfailure - Symfony 2 UserInterface:: equals($ user): Comparando para la nueva autenticación
symfony token authentication (2)
Si equals()
devuelve false
el usuario se verá obligado a volver a autenticarse. Qué es exactamente lo que revisa depende de usted, porque difiere de una aplicación a otra. En general, debe comparar todo lo que puede cambiar con respecto a un usuario que afecte la seguridad de su aplicación.
Por ejemplo, si el correo electrónico y la contraseña se usan para la autenticación en su aplicación, debe compararlos. Por el contrario, comparar los campos de nombre y apellido no tiene sentido, ya que no afectan a nada relacionado con la autenticación en tu aplicación, a menos que, por supuesto, la autenticación de tu aplicación esté basada en ellos de alguna manera.
Si admite diferentes roles en su aplicación, por ejemplo, administrador y usuario normal, y su aplicación proporciona una forma de asignar y reasignar esos roles a los usuarios, también necesita comparar roles. Porque si desea degradar a un usuario de administrador a usuario normal, quiere que el cambio surta efecto tan pronto como sea posible, en la siguiente solicitud del usuario, sin pedir explícitamente al usuario que cierre la sesión y vuelva a iniciar sesión. Si no compara roles en este caso, el usuario permanecerá como administrador hasta que su sesión caduque.
La verificación de ID no tiene sentido a menos que su aplicación proporcione una forma de cambiar los ID de usuario y se utilicen para fines de autenticación en su aplicación. Y tampoco verificaría la sal, porque si se cambia eso también significa que la contraseña también se cambia, por lo que sería suficiente verificar la contraseña solo.
De la clase UserInterface
interface UserInterface {
/**
* The equality comparison should neither be done by referential equality
* nor by comparing identities (i.e. getId() === getId()).
*
* However, you do not need to compare every attribute, but only those that
* are relevant for assessing whether re-authentication is required.
*
* @param UserInterface $user
* @return Boolean
*/
function equals(UserInterface $user);
}
¿Cómo debería implementar esto (" aquellos relevantes para evaluar si se requiere una nueva autenticación ")? Entonces, ¿esto significa que después de Symfony 2 se reauthentó (nombre de usuario / contraseña) el usuario? O es este usuario de la función reauthenticated. ¿Compruebo la id, username, password, salt
? ¿Symfony no vuelve a autenticar al usuario mediante la verificación de contraseña, que debería ser suficiente?
Actualizar:
Ahora, la función igual se eliminó de UserInterface y se agregó a una nueva interfaz: EquatableInterface y el nombre de la función se cambió a isEqualTo .
Por lo tanto, si desea cambiar la lógica que obliga al usuario conectado a desconectarse, su clase de usuario debe implementar la función de interfaz EquatableInterface isEqualTo .
Tenga cuidado: si lo hace, perderá la verificación de usuario estándar que comprueba la contraseña modificada, el nombre de usuario modificado, ...