Uitloggen

Wanneer je bovenstaande stappen hebt genomen. Kan je in middels inloggen op 'code wizards'.
Je krijgt op de pagina alleen nog niet te zien dat je ingelogd bent. Om dit kenbaar te maken is het netjes om rechts boven aan te geven dat de gebruiker is ingelogd. In plaats van de tekst inloggen.

In view/parts/navigatie-menu.view.php kunnen we dit regelen. Onderstaande stukje toont de tekst login die klikbaar is.

<div class="justify-end">
  <a href="/login" class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md font-medium">Login</a>
</div>

Eigenlijk willen we deze tekst alleen tonen als een gebruiker niet is ingelogd. Bij wel ingelogd willen we bijvoorbeeld de naam van de gebruiker tonen. Of eventueel de tekst uitloggen. We kunnen hier een IF...ELSE... structuur voor gebruiken.

Omdat we in de applicatie vaak willen kijken of een gebruiker is ingelogd, is het handig om hier een functie voor te hebben. Wat andere functies die handig zijn rondom de login voegen we ook meteen toe. Copy paste onderstaande code in functions.php.

// Heeft de ingelogde gebruiker een bepaalde rol
function hasRole($role): bool
{
  return ($_SESSION['user'] ?? false) and ($_SESSION['user']['role'] ?? '') == $role;
}

//betreft het een ingelogde gebruiker? (afkorting authenticatie)
function auth(): bool
{
  return ($_SESSION['user']['id'] ?? false);
}

// geeft de gegevens van de ingelogde gebruiker terug
// te gebruiken: user()->email
function user(): ?object
{
  return $_SESSION['user']
  ? (object)$_SESSION['user']
  : null;
}

Voor ons is de functie auth() handig om te gebruiken deze geeft een boolean terug dus true (wel ingelogd) of false (niet ingelogd)

<div class="justify-end">
  <?php if (auth()): ?>
    <a href="/logout" class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md font-medium">Logout</a>
  <?php else: ?>
    <a href="/login" class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md font-medium">Login</a>
  <?php endif; ?>
</div>

Uiteraard moeten we in router.php de /logout route nog aanmaken. Deze komt binnen als get.