public function lostPassword()
 {
     $email = $_POST['email'];
     // je vérifie si l'email existe en DB
     $usersManager = new \W\Manager\UserManager();
     $emailExists = $usersManager->emailExists($email);
     if ($emailExists) {
         // je récupère l'id de l'utilisateur et son nom
         $currentUser = $usersManager->getUserByUsernameOrEmail($email);
         $idUser = $currentUser['id'];
         $nomUser = $currentUser['nom'];
         // je crée un token (une chaine de 32 caractères aléatoires)
         $token = \W\Security\StringUtils::randomString(32);
         // j'insère en DB le token et l'id de l'utilisateur
         $tokenManager = new \Manager\TokenManager();
         $tokenManager->insert(['token' => $token, 'id_users' => $idUser]);
         // j'envoi un email avec un lien
         // et donc j'ai une route en GET /login/lostpassword/[:token]
         $usersManager = new \Manager\UserManager();
         $this->sendMail($email, $token, $nomUser);
     }
     $this->redirectToRoute('login');
 }
 public function changePassword($token)
 {
     // je regarde si le token existe en DB
     $tokenManager = new \Manager\TokenManager();
     $tokenExist = $tokenManager->tokenExists($token);
     if ($tokenExist) {
         // a la 1ere arrivée sur la page, le formulaire n'a pas été soumis
         // je regarde si l'utilisateur a mis les 2 même mot de passe
         if (isset($_POST['password']) && isset($_POST['password-confirm']) && !empty($_POST['password']) && !empty($_POST['password-confirm'])) {
             // je compare si les mots de passe sont egaux
             if ($_POST['password'] == $_POST['password-confirm']) {
                 // mise a jour du mot de passe
                 $userManager = new \Manager\UserManager();
                 $updateUser = $userManager->update(['password' => password_hash($_POST['password'], PASSWORD_DEFAULT)], $tokenExist['id_users']);
                 if ($updateUser) {
                     // suppresion du token
                     $tokenManager->delete($tokenExist['id']);
                     $this->redirectToRoute('login');
                 }
             } else {
                 $this->show('user/change_password', ['token' => $token, 'errorPass' => true]);
             }
         }
         $this->show('user/change_password', ['token' => $token]);
     }
     //le token n'existe pas en DB
     $this->show('user/change_password', ['errorToken' => true]);
 }