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.