Hier bespreken we kort het bestand /app/controllers/login.php
<?php $request->validate([ 'email' => ['required', 'email'], 'password' => ['required'] ]); $db = new Database(); //gebruiker ophalen uit de database $user = $db->query("SELECT * FROM users WHERE email = ? LIMIT 1", [ $request->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 redirect("/"); } else { $_SESSION['errors']['login'] = "Inloggegevens zijn niet correct"; } } else { $_SESSION['errors']['login'] = "Inloggegevens zijn niet correct"; } // inloggen is niet gelukt, terug naar login pagina view("login");
Hieronder in het kort wat er in de stappen wordt gedaan
$request->validate([ 'email' => ['required', 'email'], 'password' => ['required'] ]);
Verklaring: Validatie op het invullen van email adres en wachtwoord
$user = $db->query("SELECT * FROM users WHERE email = ? LIMIT 1", [ $request->email ])->fetch();
Zoeken naar een user met het betreffende emailadres
if ($user) { ... } else { $_SESSION['errors']['login'] = "Inloggegevens zijn niet correct"; }
Verklaring: Indien de $user gevonden is dan gaan we verder. Anders zetten we errors in de $_SESSION zodat deze op het inlogformulier getoond worden.
if (password_verify($_POST['password'], $user['password'])) {
Hier wordt de hash van het wachtwoord dat in de database staat vergeleken met het meegestuurde wachtwoord.
In de database staat het wachtwoord als hash omdat dan het originele wachtwoord niet of zeer moeilijk is te achterhalen uit een hash. Dus mocht een hacker de database in komen, dan heeft hij nog niet de wachtwoorden van de gebruikers. De functie password_verify(...) zal true teruggeven wanneer het wachtwoord overeen komt met de HASH uit de database.
unset($user['password']); $_SESSION['user'] = $user;
Daarna wissen we het wachtwoord uit de user gegevens
En we zetten de overige gegevens van de $user in een SESSION