---
# System prepended metadata

title: 'Día 12, proyecto Bienes Raíces: añadiendo autentificación'
tags: [php]

---

# Día 12, proyecto Bienes Raíces: añadiendo autentificación


Hay diferentes formas de
autenticar usuarios:
• Con algo que el usuario recuerda (un password)
• Con un dispositivo físico (un mensaje a un celular)
• Con algo físico (Huella Digital o Cara)

En general estos son los pasos a seguir:
• Email y Password deben coincidir.
• Otras validaciones incluyen:
• Si el Usuario existe
• Si el usuario existe pero el password es incorrecto
• Si ambos son correctos entonces autenticar el usuario

## Php y autentificación
• PHP contiene funciones para hashear passwords (no encriptar)
• También hay una función para verificar un password.
• Un Password Hasheado no se puede revertir.
• Si al usuario se le olvida deberá crear un nuevo password

## Creando usuarios

Crea un script en la raíz del proyecto que nos sirva para pruebas...usuario.php.
Crea una tabla de usuarios (no hace falta relacionarla por ahora con los vendedores).
Créala de tal manera que sirva para introducir el siguiente usuario (sólo adelanto que el password debe ser un char(60))

```
<?php
//importar la conexión
require './includes/config/database.php';
$db=conectarDB();
//crear un email y un password
$email="correos@correo.com";
$password= "123456";
//query para crear el usuario
$query= "INSERT INTO usuarios(email, password) VALUES ('${email}', '${password}');";
echo $query;

//agregarlo a la bd
mysqli_query($db, $query);
?>
```
Al ejecutar usuario.php debería crearse el nuevo usuario. 
## Hashear passwords
Como ves ese password está totalmente expuesto, hay que ocultándolo usando critografía, o lo que se llama comúnmente Hashear.

Antes se usaba el algoritmo md5 pero es un algoritmo que ya se puede hackear fácilmente y no se usa para seguridad.

Prueba a incluir para que veas el password hasheado:
`var_dump(md5($password));`

Actualmente se usa password_hash, está incluido en el php así que no tienes que importar ninguna librería:
https://www.php.net/manual/es/function.password-hash.php

`$passwordHash=password_hash($password,PASSWORD_DEFAULT);`


Este algoritmo es bastante seguro y como ves genera un hash de 60 caracteres.
Ahora modificamos la consulta para que incluya el password hasheado, borramos el usuario anterior y creamos uno nuevo con el nuevo script.
Fíjate que antes como administrador de la base de datos podías ver las contraseñas de tus usuario que andarían en texto plano rondando por internet, ahora ya tendrías que hacer labor de desencriptar para poder acceder a ella. 

Los siguientes pasos serían:
- Crear un formulario para autenticar
- validaciones al formulario
- revisar si el usuario existe o no
- revisar si el password es correcto o no
- Iniciar sesión y superglobal $_SESSION
- Proteger las páginas según sea necesario
- Cerrar sesión. 
