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.
<?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.