Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created January 20, 2021 22:48
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/d0edfed9b553f05789818946229ac4f0 to your computer and use it in GitHub Desktop.
Save parzibyte/d0edfed9b553f05789818946229ac4f0 to your computer and use it in GitHub Desktop.
<?php
/*
Regresa valores numéricos
0 en caso de que el usuario no exista o la contraseña sea incorrecta
1 en caso de que todo esté bien
2 en caso de que haya alcanzado el límite de intentos
*/
function hacerLogin($correo, $palabraSecreta)
{
$bd = obtenerBaseDeDatos();
$sentencia = $bd->prepare("SELECT id, correo, palabra_secreta FROM usuarios WHERE correo = ?");
$sentencia->execute([$correo]);
$registro = $sentencia->fetchObject();
if ($registro == null) {
# No hay registros que coincidan, y no hay a quién culpar (porque el usuario no existe)
return 0;
} else {
# Sí hay registros, pero no sabemos si ya ha alcanzado el límite de intentos o si la contraseña es correcta
$conteoIntentosFallidos = obtenerConteoIntentosFallidos($registro->id);
if ($conteoIntentosFallidos >= MAXIMOS_INTENTOS) {
# Ha superado el límite
return 2;
} else {
# Extraer la correcta de la base de datos
$palabraSecretaCorrecta = $registro->palabra_secreta;
# Comparar con la proporcionada:
# Nota: esto es por simplicidad, en la vida real debes hashear las contraseñas
# https://parzibyte.me/blog/2017/11/13/cifrando-comprobando-contrasenas-en-php/
if ($palabraSecretaCorrecta === $palabraSecreta) {
# Todo correcto. Borramos todos los intentos, pues ya hizo uno exitoso
eliminarIntentos($registro->id);
return 1;
} else {
# Agregamos un intento fallido
agregarIntentoFallido($registro->id);
return 0;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment