94 lines
3.5 KiB
PHP
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()
|
|
]);
|
|
}
|
|
?>
|