## Login controller

Nu gaan we de login controller aanmaken, deze doet onderstaande stappen:

- controle op invullen van email en wachtwoord
- selecteer de gebruiker met het betreffende email adres
- controleer of het wachtwoord van deze gebruiker overeenkomt met het ingevoerde wachtwoord

Indien één van deze stappen mislukken dan wordt de gebruiker teruggestuurd naar het inlog formulier.
Als alle stappen goed zijn doorlopen wil je onthouden dat de gebruiker is ingelogd. Zodat hij niet bij het surfen door je website bij elke pagina opnieuw moet inloggen.

### Voorbeeld van login controller (controllers/login.php)

    <?php
    require "../src/Validator.php";

    if (!Validator::required($_POST['email'])) {
      $errors['login'] = "Email mag niet leeg zijn";
    }
    if (!Validator::required($_POST['password'])) {
      $errors['login'] = "Wachtwoord mag niet leeg zijn";
    }

    if (empty($errors)) {
      $db = new Database();
      //gebruiker ophalen uit de database
      $user = $db->query("SELECT * FROM users WHERE email = ? LIMIT 1", [
        $_POST['email']
      ])->fetch();

      // als er een gebruiker is gevonden
      if ($user) {
        //wachtwoord controleren
        if (password_verify($_POST['password'], $user['password'])) {

          //gebruiker in session zetten, maar het wachtwoord laten we weg
          unset($user['password']);
          $_SESSION['user'] = $user;

          flash("Welkom terug " . $user['name'], true);

          // doorsturen naar de home pagina (of pas aan)
          header("Location: /");
        } else {

          $errors['login'] = "Inloggegevens zijn niet correct";
        }
      } else {
        $errors['login'] = "Inloggegevens zijn niet correct";
      }
    }

    view("login", [
      'errors' => $errors,
    ]);

Bij de functie `password_verify(...)` wordt het verstuurde wachtwoord vergeleken met de wachtwoord HASH uit de database.

Zie ook het commentaar in de code. Dit maakt het zelfs leesbaar als je niet veel programmeer ervaring hebt.