1ra Versión
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 0);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
try {
|
||||
require_once 'conexion.php';
|
||||
|
||||
$data = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
if (!isset($data['correo']) || !isset($data['codigo']) || !isset($data['nueva_contrasena'])) {
|
||||
echo json_encode(['success' => false, 'message' => 'Faltan datos requeridos']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$correo = mysqli_real_escape_string($conexion, trim($data['correo']));
|
||||
$codigo = mysqli_real_escape_string($conexion, trim($data['codigo']));
|
||||
$nueva_contrasena = mysqli_real_escape_string($conexion, $data['nueva_contrasena']);
|
||||
|
||||
// Validar que la contraseña tenga al menos 6 caracteres
|
||||
if (strlen($nueva_contrasena) < 6) {
|
||||
echo json_encode(['success' => false, 'message' => 'La contraseña debe tener al menos 6 caracteres']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Verificar el código y que no haya expirado
|
||||
$sql = "SELECT ID_Usuario, Codigo_Recuperacion, Fecha_Exp_Codigo FROM usuarios WHERE Correo = '$correo'";
|
||||
$resultado = mysqli_query($conexion, $sql);
|
||||
|
||||
if (!$resultado) {
|
||||
error_log('Error en SELECT: ' . mysqli_error($conexion));
|
||||
throw new Exception('Error en la consulta: ' . mysqli_error($conexion));
|
||||
}
|
||||
|
||||
if (mysqli_num_rows($resultado) === 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Correo no encontrado']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$usuario = mysqli_fetch_assoc($resultado);
|
||||
$id_usuario = $usuario['ID_Usuario'];
|
||||
|
||||
// Verificar si el código es correcto
|
||||
if ($usuario['Codigo_Recuperacion'] === null || $usuario['Codigo_Recuperacion'] === '') {
|
||||
echo json_encode(['success' => false, 'message' => 'No hay código generado. Solicita uno nuevo']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($usuario['Codigo_Recuperacion'] !== $codigo) {
|
||||
echo json_encode(['success' => false, 'message' => 'Código incorrecto']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Verificar si el código ha expirado
|
||||
if ($usuario['Fecha_Exp_Codigo'] === null) {
|
||||
echo json_encode(['success' => false, 'message' => 'Error: fecha de expiración no registrada']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$fecha_actual = new DateTime();
|
||||
$fecha_exp = new DateTime($usuario['Fecha_Exp_Codigo']);
|
||||
|
||||
if ($fecha_actual > $fecha_exp) {
|
||||
echo json_encode(['success' => false, 'message' => 'El código ha expirado. Solicita uno nuevo']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Actualizar la contraseña - IMPORTANTE: el nombre de la columna es "Contraseña" con acento
|
||||
$sql_update = "UPDATE usuarios SET `Contraseña` = '$nueva_contrasena', `Codigo_Recuperacion` = NULL, `Fecha_Exp_Codigo` = NULL WHERE ID_Usuario = $id_usuario";
|
||||
|
||||
if (!mysqli_query($conexion, $sql_update)) {
|
||||
error_log('Error en UPDATE: ' . mysqli_error($conexion) . ' | SQL: ' . $sql_update);
|
||||
throw new Exception('Error al actualizar: ' . mysqli_error($conexion));
|
||||
}
|
||||
|
||||
// Verificar que se actualizó correctamente
|
||||
if (mysqli_affected_rows($conexion) === 0) {
|
||||
error_log('Warning: UPDATE ejecutado pero no afectó filas');
|
||||
echo json_encode(['success' => false, 'message' => 'No se pudo actualizar la contraseña']);
|
||||
exit;
|
||||
}
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Contraseña actualizada correctamente']);
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log('Exception en Recuperar_Contrasena_Verificar: ' . $e->getMessage());
|
||||
echo json_encode([
|
||||
'success' => false,
|
||||
'message' => 'Error: ' . $e->getMessage()
|
||||
]);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user