Al configurar una función de "cambio de contraseña" para un sitio, tengo una entrada de contraseña secundaria ( donde debe ingresar su contraseña nuevamente antes de poder cambiarla ).
Necesito poder verificar la contraseña actual del usuario ( hash usando Bcrypt ) contra la contraseña que se ingresó.
En mi acción de controlador tengo:
$currentPassword = $request->request->get('password'); $encoder = $this->container->get('security.password_encoder'); $encodedPassword = $encoder->encodePassword($user, $currentPassword); if($encodedPassword == $user->getPassword()) { // these don't ever match. // ... } encodePassword(...) produce un resumen de la contraseña que se ingresó, pero no es la misma que la contraseña guardada ( el texto sin formato es el mismo ), por lo que creo que se está aplicando una sal diferente y, por lo tanto, se produce la falta de coincidencia. .
Dado que Bcrypt incorpora la sal en el resumen de la contraseña, no la guardo en ningún lado.
¿Cómo puedo verificar si la contraseña de texto sin formato ingresada coincide con el resumen de Bcrypt almacenado en Symfony 3?
No estoy usando FOSUserBundle .
Puede comparar la contraseña de $currentPassword con la almacenada utilizando el método isPasswordValid del servicio de codificador:
$encoderService = $this->container->get('security.password_encoder')
y luego pase el objeto de usuario como primer argumento del método:
$match = $encoderService->isPasswordValid($userObject, $currentPassword)
eso devolverá true si la comparación coincide o false en caso contrario.