renvoi mote de passe oublié par mail

a marqué ce sujet comme résolu.
Auteur du sujet

J 'essaie tant bien que mal à regénérer un nouveau MDP pour que celui ci soit envoyer par mail, mais rien n' y fait. Je suis un débutant, je précise, je compte sur vous, merci d' avance de m' éclaircir !!!

<?php

    session_start();
include('connexion.php');
   
    if (isset($_SESSION['id'])){
        header('Location: indexbis.php');
        exit;
    }

    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        if (isset($_POST['oublie'])){

             $mail = htmlentities(strtolower(trim($_POST['mail'])));  // On récupère le mail afin d envoyer le mail pour la récupèration du mot de passe 

           
        



        //Si le mail est vide alors on ne traite pas
           

         if(empty($mail)){
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }

            if($valid){

                $verification_mail = $DB->query("SELECT nom, prenom, mail, mdp 
                    FROM utilisateurs WHERE mail = ?",
                    array($mail));

                $verification_mail = $verification_mail->fetch();

                if(isset($verification_mail['mail'])){

                    if($verification_mail['n_mdp'] == 0){
                       
            
             // On génère un mot de passe à l'aide de la fonction RAND de PHP
                        $new_pass = rand();

   

                        // Le mieux serait de générer un nombre aléatoire entre 7 et 10 caractères (Lettres et chiffres)
                        $new_pass_crypt = crypt($new_pass, "");

                        $objet = 'Nouveau mot de passe';
                        $to = $verification_mail['mail'];



                        //===== Création du header du mail.
                        $header = "From: NOM_DE_LA_PERSONNE <no-reply@test.com> \n";
                        $header .= "Reply-To: ".$to."\n";
                        $header .= "MIME-version: 1.0\n";
                        $header .= "Content-type: text/html; charset=utf-8\n";
                        $header .= "Content-Transfer-Encoding: 8bit";




                        //===== Contenu de votre message
                        $contenu =  "<html>".
                            "<body>".
                            "<p style='text-align: center; font-size: 18px'><b>Bonjour Mr, Mme".$verification_mail['nom']."</b>,</p><br/>".
                            "<p style='text-align: justify'><i><b>Nouveau mot de passe : </b></i>".$new_pass."</p><br/>".
                            "</body>".
                            "</html>";



                        //===== Envoi du mail
                        mail($to, $objet, $contenu, $header);

                       $DB->insert("UPDATE utilisateurs SET mdp = ?, n_mdp = 1 WHERE mail = ?",
            array($new_pass_crypt, $verification_mail['mail']));
            $req = $DB->prepare('UPDATE utilisateurs SET mdp = ?, n_mdp = 1 WHERE mail = ?');
            $req->execute(array($new_pass_crypt, $verification_mail['mail']));
                    }   
                }       
                header('Location: indexbis.php');
                exit;
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        






    <title>Mot de passe oubli&eacute</title>
    </head>

    <body>
        <div>Mot de passe oubli&eacute</div>
        <form method="post">

            <?php



                if (isset($er_mail)){
            ?>
                <div><?= $er_mail ?></div>




            <?php   
               

   }
            ?>

            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>

            <button type="submit" name="oublie">Envoyer</button>
        </form>
    </body>
</html>

Édité par artragis

+0 -1

Cette réponse a aidé l’auteur du sujet

J 'essaie tant bien que mal à regénérer un nouveau MDP pour que celui ci soit envoyer par mail,

Ça n’est pas la bonne solution, parce que du coup tu vas avoir un mot de passe en clair dans les mails. La procédure standard et sécurisée en cas de réinitialisation de mot de passe, c’est :

  1. L’utilisateur clique sur « j’ai oublié mon mot de passe » (ou bouton équivalent) et le cas échéant doit donner l’adresse mail associée au compte.
  2. Tu lui envoie un lien avec un jeton aléatoire unique à durée de vie courte (disons, 24h) à cette adresse mail.
  3. L’utilisateur clique sur le lien : il peut saisir lui-même son nouveau mot de passe. Quand c’est fait, tu invalides le jeton.
  4. L’utilisateur peut de nouveau se connecter.

De cette façon si quelqu’un tombe sur les mails, il ne peut ni avoir de mot de passe en clair, ni avoir de lien de réinitialisation de mot de passe fonctionnel dès que la procédure est finie. De même, ça protège contre quelqu’un qui verrait l’écran (mais pas le clavier pendant la saisie du nouveau mot de passe, évidemment) (streaming, partage d’écran laissé allumé, mail reçu pendant une réunion…).

Auteur du sujet

merci d' avoir répondu A-312

En fait rien ne se passe, il me semblait qu' une fois suffisait à appeler "session start" tant que je reste entre mes balises php. Du coup rien ne se génère, j' ai aucune erreur sur ma console de débogage !

+0 -0
Auteur du sujet

merci d' avoir répondu SpaceFox,

connaitrais tu un tuto ou un lien où je puisse mettre en pratique ta solution, parce que j' avoue que je suis perdu et j' en ai réellement besoin en vue d' une soutenance prochainement.

+0 -0
Auteur du sujet

nyre, j' ai tout essayé malheureusement, tutos,… essayer différents modèles…mais rien. J' ai mon tuteur de stage qui doit venir m' aider cet aprém, je te tiens au jus dès que j' ai trouvé ;)

+0 -0
Auteur du sujet

salut pour l' envoi j' ai réussi, trop content, je vous montre mon code :

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Mot de passe oubli&eacute</title>
    </head>
    <body>
        <h1>Mot de passe oubli&eacute</h1>
            <form method="post">
            <label>Email</label>
            <input type="email" name="email" required><br>
            <label>Message</label>
            <textarea name="message" required></textarea><br>
            <input type="submit">
        </form>
        

    
<?php
        if(isset($_POST['message'])){
            $position_arobase=strpos($_POST['email'],'@');
            if($position_arobase===false)
                echo '<p>Votre email doit comporter un arobase.</p>';
            else {
                $retour=mail('*****@gmail.com','Envoi depuis *****', $_POST['message'], 'From : '.$_POST['mail']);//preciser le mail et le nom de votre expediteur par exemple
                if($retour)
                    echo '<p>Votre message a &eacutet&eacute envoy&eacute.</p>';
                else
                    echo '<p>Erreur.</p>';
            }
        }
        ?>
    </body>
</html>
+0 -0

Cette réponse a aidé l’auteur du sujet

Salut, pour vérifier qu’une adresse email est valide, il existe la fonction FILTER_VALIDATE_EMAIL.

Valide une adresse de courriel.

En général, ceci valide l’adresse de courriel selon la syntaxe défini par la RFC 822, à l’exception des commentaires, du remplissage par des espaces et les noms de domaine sans point qui ne sont pas pris en charge.
http://php.net/manual/fr/filter.filters.validate.php

HTTP/1.1 418 I’m a teapot

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte