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]); }