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 reset() { $usersManager = new \W\Manager\UserManager(); $tokensManager = new \Manager\TokensManager(); $newToken = new \W\Security\StringUtils(); $layout = array('ismain' => false, 'form' => false); if (isset($_POST['sent'])) { if ($usersManager->emailExists($_POST['email'])) { $token = $newToken->randomString(); $email = $_POST['email']; if ($tokensManager->findEmail($_POST['email'])) { $toInsert = array('token' => $token); $tokensManager->updateFromEmail($toInsert, $_POST['email']); } else { $toInsert = array('email' => $email, 'token' => $token); $tokensManager->insert($toInsert); } echo "<p>Un email vous a été envoyé pour réinitialiser vôtre mot de passe</p>"; echo '<a href="/">Retour a l\'accueil</a>'; $message = '<p>Voici le lien pour réinitialiser vôtre mot de passe</p>' . '<br>' . '<a href="http://www.crescendo.site/newpass/' . $token . '">réinitialiser mon mot de passe</a>'; $to = $email; $subject = 'CrescendO : Réinitialisation du mot de passe.'; $message = $message; $headers = 'From: service@crescendo.site' . "\r\n" . 'Reply-To: service@crescendo.site' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); } else { echo "<p>L'email renseigné n'existe pas.</p>"; } } $this->show('choristes/resetPass', ['layout' => $layout]); }