Files
Complejo_Cap1tan/php/Recuperar_Contrasena_Verificar.php
MarcosFlorSalcedo 8ec55e40fc 1ra Versión
2026-07-14 18:24:27 -03:00

94 lines
3.5 KiB
PHP

<?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()
]);
}
?>