/** * * Método para logear al usuario. * */ public function login($authMethod) { if ($authMethod == "LOCAL") { //Obtengo el número de intentos de sesión de la ip. $attcount = $this->getattempt($_SERVER['REMOTE_ADDR']); if ($attcount >= self::MAX_ATTEMPTS) { throw new ExceedSessionAttempts("Has sobrepasado el número de intentos de sessión permitidos - espere 30 minutos"); } else { //Validamos datos. //Saneamos y Filtramos los datos. $nick = filter_input(INPUT_POST, 'nick', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); if ($nick && $password) { //Comprobamos si existe ese usuario con esa contraseña. $sql = $this->pdo->prepare('SELECT * FROM USUARIOS WHERE nick = :nick AND authMethod = "LOCAL"'); $sql->execute(array('nick' => $nick)); $usuario = $sql->fetch(PDO::FETCH_ASSOC); if (!check_password($password, $usuario["password"])) { //Fallo al intentar iniciar sesión. //Añadimos intento de sesión. $this->addattempt($_SERVER['REMOTE_ADDR']); //Registramos acción. logger_action("intento sesión fallido", $_SERVER["REMOTE_ADDR"]); throw new LoginFailed("Usuario o contraseña no válidos"); } else { //usuario logeado correctamente. logger_action("sesión iniciada", $_SERVER["REMOTE_ADDR"]); //Generamos token de sesión return $this->generateSessionToken($usuario["id"]); } } else { throw new InvalidData("Nick y password no pueden estar vacíos"); } } } else { //Saneamos y validamos email. $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL, FILTER_VALIDATE_EMAIL); $stmt = $this->pdo->prepare('SELECT * FROM USUARIOS WHERE email = :email AND authMethod = :authMethod'); $stmt->execute(array('email' => $email, 'authMethod' => $authMethod)); $usuario = $stmt->fetch(PDO::FETCH_ASSOC); if ($stmt->rowCount() == 0) { throw new LoginFailed("Usuario o contraseña no válidos"); } else { //usuario logeado correctamente. logger_action("sesión iniciada", $_SERVER["REMOTE_ADDR"]); //Generamos token de sesión return $this->generateSessionToken($usuario["id"]); } } }
$stmt->bindParam(':nick', $nick, PDO::PARAM_STR); $stmt->bindParam(':password', $hash, PDO::PARAM_STR); $stmt->bindParam(':firstName', $firstName, PDO::PARAM_STR); $stmt->bindParam(':lastName', $lastName, PDO::PARAM_STR); $stmt->bindParam(':email', $email, PDO::PARAM_STR); $stmt->bindParam(':fechaNac', $fechaNac, PDO::PARAM_STR); $stmt->bindParam(':sexo', $sexo, PDO::PARAM_STR); $stmt->bindParam(':ubicacion', $ubicacion, PDO::PARAM_STR); $stmt->bindParam(':telefono', $telefono, PDO::PARAM_INT); $stmt->bindParam(':authMethod', $authMethod, PDO::PARAM_STR); //Ejecutamos la sentencia. $exito = $stmt->execute(); //La operación tuvo éxito. if ($exito) { //Enviamos email al usuario. echo json_encode(array("error" => false, "type" => "REGISTRATION_SUCCESFULL", "data" => "Te has dado de alta correctamente, en breve recibirás un correo con tus datos de acceso")); if ($authMethod == "LOCAL") { logger_action("CONTRASEÑA GENERADA", $password); } send_mail($email, "Bienvenido a TeVeo!", $message); } } catch (PDOException $e) { logger_action("ERROR_REGISTRO", $e->getMessage()); echo json_encode(array("error" => true, "type" => "DATABASE", "data" => "Ocurrió un error inténtelo más tarde")); } } else { echo json_encode(array("error" => true, "type" => "INVALID_DATA", "data" => $errores)); } } } sleep(5);