Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created February 18, 2019 18:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/9be585e5ef1f81f786d0be12777b5e48 to your computer and use it in GitHub Desktop.
Save parzibyte/9be585e5ef1f81f786d0be12777b5e48 to your computer and use it in GitHub Desktop.
<?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