-
-
Save parzibyte/9be585e5ef1f81f786d0be12777b5e48 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
# Incluir lo de la BD, podría ser con un autoload pero eso es más avanzado | |
# Mira la explicación de PDO: https://parzibyte.me/blog/2019/02/16/php-pdo-parte-2-iterar-cursor-comprobar-si-elemento-existe/ | |
include_once "base_de_datos.php"; | |
function usuarioExiste($correo) | |
{ | |
$base_de_datos = obtenerBaseDeDatos(); | |
$sentencia = $base_de_datos->prepare("SELECT correo FROM usuarios WHERE correo = ? LIMIT 1;"); | |
$sentencia->execute([$correo]); | |
return $sentencia->rowCount() > 0; | |
} | |
function obtenerUsuarioPorCorreo($correo) | |
{ | |
$base_de_datos = obtenerBaseDeDatos(); | |
$sentencia = $base_de_datos->prepare("SELECT correo, palabra_secreta FROM usuarios WHERE correo = ? LIMIT 1;"); | |
$sentencia->execute([$correo]); | |
return $sentencia->fetchObject(); | |
} | |
function registrarUsuario($correo, $palabraSecreta) | |
{ | |
# NUNCA guardes contraseñas en texto plano | |
$palabraSecreta = hashearPalabraSecreta($palabraSecreta); | |
$base_de_datos = obtenerBaseDeDatos(); | |
$sentencia = $base_de_datos->prepare("INSERT INTO usuarios(correo, palabra_secreta) values(?, ?)"); | |
return $sentencia->execute([$correo, $palabraSecreta]); | |
} | |
function login($correo, $palabraSecreta) | |
{ | |
# Primero obtener usuario... | |
$posibleUsuarioRegistrado = obtenerUsuarioPorCorreo($correo); | |
if ($posibleUsuarioRegistrado === false) { | |
# Si no existe, salimos y regresamos false | |
return false; | |
} | |
# Esto se ejecuta en caso de que exista | |
# Comprobar contraseñas | |
# Sacar el hash que tenemos en la BD | |
$palabraSecretaDeBaseDeDatos = $posibleUsuarioRegistrado->palabra_secreta; | |
$coinciden = coincidenPalabrasSecretas($palabraSecreta, $palabraSecretaDeBaseDeDatos); | |
# Si no coinciden, salimos de una vez | |
if (!$coinciden) { | |
return false; | |
} | |
# En caso de que sí hayan coincidido iniciamos sesión pasando el objeto | |
iniciarSesion($posibleUsuarioRegistrado); | |
# Y regresamos true ;) | |
return true; | |
} | |
function iniciarSesion($usuario) | |
{ | |
// Se encarga de poner los datos dentro de la sesión | |
session_start(); | |
# Y poner los datos, no recomiendo poner la contraseña | |
$_SESSION["correo"] = $usuario->correo; | |
} | |
# Para las contraseñas mira lo siguiente | |
# https://parzibyte.me/blog/2017/11/13/cifrando-comprobando-contrasenas-en-php/ | |
function coincidenPalabrasSecretas($palabraSecreta, $palabraSecretaDeBaseDeDatos) | |
{ | |
return password_verify($palabraSecreta, $palabraSecretaDeBaseDeDatos); | |
} | |
function hashearPalabraSecreta($palabraSecreta) | |
{ | |
return password_hash($palabraSecreta, PASSWORD_BCRYPT); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment