IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Convertir password en md5 + envoi de lien par mail


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Convertir password en md5 + envoi de lien par mail
    Bonjour !

    Je suis actuellement en train de bosser sur un projet de "mot de passe oublié".

    Je dois :

    - Faire saisir l'adresse mail à l'utilisateur

    - Une fois l'adresse mail saisie, un mail devrait lui être envoyé contenant le lien pour le changer

    - Son nouveau mot de passe saisit doit directement être hashé en md5

    Je n'ai aucune idée de comment réaliser l'envoi de mail contenant le lien de ma page, et le mieux serait que ce lien soit aléatoire et que la page sur laquelle il renvoi ne soit accessible qu'en ayant cliqué sur ce lien.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    <!DOCTYPE html>
     
     
    <html>
     
     <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Récupération mot de passe</title>
        </head>
        <body>
     
        <center>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
    <form action="#" method="post">
     <fieldset>
     
       <p>
          <label for="email">eMail : </label>
          <input type="text" name="email" />
       </p>
     </fieldset>
     <p><input name="submit" type="submit" value="Envoyer"/></p>
    </form>
        </center>     
        </body>
    </html>
    <?php
    if (isset($_POST['email']))
      {
        $_POST['email'] = htmlspecialchars($_POST['email']);
     
          if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i", $_POST['email']))
            {
              $email = $_POST['email'];
              header('Location: http://127.0.0.1/Gestion%20mot%20de%20passe/newpassword.php');
            }
          else
            {
              $email = "Adresse eMail invalide";
            }
      }
    else
      {
        $email = "";
      }
     
      echo $email;
     
     
     
      ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <!DOCTYPE html>
     
     
    <html>
     
     <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Récupération mot de passe</title>
        </head>
        <body>
     
        <center>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
    <?php
     
    if(!empty($_POST)){
        //
        // Debug
        //
     
        //echo '<pre>';
        // print_r($_POST);
        // echo '</pre>';
     
        //
        // Récupération normale des informations
        //
        if($_POST['password_1'] != $_POST['password_2']){
            echo 'Les mots de passe ne sont pas identiques';
        }
        else{
            echo 'Le mot de passe a été correctement saisi';
            header('Location: http://127.0.0.1/Gestion%20mot%20de%20passe/felicitations.php#');
        }
        echo '<br /><br />';
     
     
        }
     
     
    ?>
     
     
    <form method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data">
     
       <center> <label>Mot de passe : <input type="password" name="password_1" size="23" /></label><br />
        <label>Vérification    : <input type="password" name="password_2" size="25" /></label><br /><br />
       </center>
        <input type="submit" value="Envoyer" />
        <input type="reset" value="Rétablir" />
     
     
     
     
    </form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!--
    To change this template, choose Tools | Templates
    and open the template in the editor.
    -->
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <meta http-equiv="refresh" content="7; URL=************">
            <title>redirection</title>
        </head>
        <body>
            <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>   <br>
            <center> Félicitations, vous allez maintenenant être redirigé vers la page de connexion. </center>
            <center> Si vous n'êtes pas redirigé, merci de cliquer sur ce<a href="*******"> lien</a></center>
     
            <?php
            // put your code here
            ?>
        </body>
    </html>
    Si vous pouviez me filer un petit coup de main, je ne trouve pas comment faire.. Merci !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il suffit d'inclure un jeton dans le lien.
    Par exemple http://tonsite/mdp.php?jeton=dlfkl6Fsdj454hsdgml

    Ce jeton est stocké dans la base de données et permet de faire la liaison entre la demande de mot de passe et courriel.

  3. #3
    Membre régulier Avatar de kernigansnotdead
    Homme Profil pro
    Traducteur technique anglais > français indépendant
    Inscrit en
    Septembre 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Traducteur technique anglais > français indépendant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 77
    Points : 73
    Points
    73
    Par défaut
    Pour envoyer un email via PHP il faut soit utiliser la fonction mail() native de PHP ou disons pour gagner en temps et en efficacité, utiliser une librairie comme PHPMailer 5.
    Le mieux si tu n'a jamais fait d'envoi mail en programmation c'est de commencer par l'envoie d'une simple chaine de charactères via la fonction mail et ensuite tu complique, avec de l'html dans le corps du message etc. Voila un bon lien http://php.net/manual/en/function.mail.php

  4. #4
    Membre régulier Avatar de kernigansnotdead
    Homme Profil pro
    Traducteur technique anglais > français indépendant
    Inscrit en
    Septembre 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Traducteur technique anglais > français indépendant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 77
    Points : 73
    Points
    73
    Par défaut
    et pour le reste de ton algorythme, je ferais :

    vérif nom et pass

    -si nom et pass sont dans la base ->
    création nouveau mot de passe + insertion dans la base via la fonction md5() + envoie direct non crypté par mail à l'utilisateur

    -sinon, le renvoyer case départ avec message comme quoi il s'est trompé

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ma fonction mail fonctionne, cependant envoyer un email de réinitialisation de mot de passe contenant un lien aléatoire reste assez flou..

    N'y aurait-il pas quelque chose de plus simple et intuitif que les jetons ?

    Par exemple ma page se situe ici : 127.0.0.1/resetpassword.php

    Serait il possible que dans le lien il soit écrit : cliquez sur ce lien 127.0.0.1/=45984&éeaz (caricaturé) afin de réinitialiser votre mot de passe

    Sachant que l'adresse aléatoire renverrait sur la bonne, et qu'on ne pourrait accéder à la bonne qu'avec l'aléatoire

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce que tu décris est nettement plus compliqué et farfelu que le système de jeton qui est un classique.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ok, je vais partir sur un système de jeton alors.

    Il me semble l'avoir intégré à ma fonction mail que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    //On démarre les sessions
    session_start();
    //On génére un jeton totalement unique (c'est capital :D)
    $token = uniqid(rand(), true);
    //Et on le stocke
    $_SESSION['token'] = $token;
    //On enregistre aussi le timestamp correspondant au moment de la création du token
    $_SESSION['token_time'] = time();
    if (isset($_POST['email']))
      {
        $_POST['email'] = htmlspecialchars($_POST['email']);
     
          if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i", $_POST['email']))
            {
              $email = $_POST['email'];
              header('Location: ******'); 
            }
          else
            {
              $email = "Adresse eMail invalide";
            }
      }
    else
      {
        $email = "";
      }
     
      echo $email;
     
     
    $email = '******.*****@gmail.com'; // Déclaration de l'adresse de destination.
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $email)) // On filtre les serveurs qui rencontrent des bogues.
    {
    	$passage_ligne = "\r\n";
    }
    else
    {
    	$passage_ligne = "\n";
    }
    //=====Déclaration des messages au format texte et au format HTML.
    $message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
    $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
    //==========
     
    //=====Création de la boundary
    $boundary = "-----=".md5(rand());
    //==========
     
    //=====Définition du sujet.
    $sujet = "Hey mon ami !";
    //=========
     
    //=====Création du header de l'e-mail.
    $header = "From: \"WeaponsB\"<******>".$passage_ligne;
    $header.= "Reply-to: \"WeaponsB\" <******>".$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    //==========
     
    //=====Création du message.
    $message = $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout du message au format texte.
    $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_txt.$passage_ligne;
    //==========
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout du message au format HTML
    $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;
    //==========
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    //==========
     
    //=====Envoi de l'e-mail.
    mail($email,$sujet,$message,$header);
    //==========
     
     
      ?>
    Je n'arrive cependant pas à saisir la syntaxe pour inclure un jeton dans un lien ?

    Apparemment je pourrais inclure le jeton à l'url avec un "get" mais je ne vois pas comment le faire, ni où le mettre ? Faut-il l'inclure dans le contenu du mail ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il est ou ton lien dans tout ce code ?

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Il sera ligne 44

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
    Je ne peux pas fournir d'exemple de lien avec un jeton puisque je ne sais pas le construire

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu pouvais au moins écrire le lien sans le jeton.
    Le format du lien, je te l'ai donné dans le premier message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien = '<a href="http://tonsite/tapagephp?jeton=' . $token . '">Cliquer-ici</a>';
    Et tu recupères donc ensuite $_GET['jeton']

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Il sera ligne 44

    $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";

    Je ne peux pas fournir d'exemple de lien avec un jeton puisque je ne sais pas le construire
    tu construis l'url à l'aide de la balise a
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.";
     $message_html .="<p><a href='http://tonsite.com/passwordoublier.php?jeton=".$token."'>cliquer ici pour réinitialiser le mdp </p>";
    $message_html .="</body></html>";

    le script passwordoublier.php va donc vérifier si le token provenant de l'url est le même que celui stocké dans la BD. Si c'est le cas on affiche un formulaire demandant un nouveau mot de passe à l'utilisateur.sinon l'internaute n'a jamais demandé la réinitialisation de son mot de passe.

    Un détail important dans ce processus c'est d'ajouter l'id de l'utilisateur au jeton pour s'assurer de l'unicité du jeton envoyé à l'utilisateur.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $token = $token = uniqid(rand(), true) .$id;

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci à vous trois de m'avoir éclairé, j'ai compris le fonctionnement et ai même réussit à le mettre en place.

    Bonne journée et merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi lien par mail marche pas avec "?"
    Par christgh dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2008, 17h51
  2. [Mail] envoi de tableau par mail !
    Par the_metalos dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2007, 11h00
  3. [Mail] envoie des données par mail
    Par leclone dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2007, 10h15
  4. [Mail] problème d'envoi de formulaire par mail
    Par alpking dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2006, 19h12
  5. Bloquer l'envoi de pages par mail dans IE 6
    Par Anemhedd dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/06/2006, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo