PHP Récupération de mot de passe // MaNGOS
[Image: titrepetit-2660cf9.png]

Information :
Voici un script PHP qui permet de récupérer les mots de passe perdus.
Il faut entrer le nom de son compte et son adresse email et un courriel sera envoyé indiquant le nouveau mot de passe.


Ajouter un champ dans la base de données :
Pour que ce script soit utilisable, vous devez ajouter le champ 'reset_password' VARCHAR (50) NOT NULL dans la table account de la base realmd.

Le script :
Code PHP :
<?php
// Configuration
$cfg_server_name ''// Nom de votre serveur
$cfg_realmdb = array(
                                                                
'db_host'=> 'localhost'//Hôte BDD
                                                                
'db_username' => 'root',//Utilisateur BDD
                                                                
'db_password' => '',//Mot de passe BDD
                                                                
'db_name'=> 'realmd',//Nom de la base de données Reamld
);
$cfg_mail = array(
                                                
'path_to_thisfile' => 'http://monsite.com/lostPass.php'// Le chemin vers le fichier contenant le script
                                                
'email_from' => ''// Adresse email qui enverra les mails
                                                
'email_subject' => '['.$cfg_server_name.'] Réinitialisation de mot de passe'// Sujet du mail
);

// FIN DE CONFIGURATION
/************************************************************​​*********************/
// Implémentation

function sha_pass($user$pass){
        return 
sha1(strtoupper($user).':'.strtoupper($pass));
}

function 
random_string($counts){
        
$str "abcdefghijklmnopqrstuvwxyz";//Count 0-25
        
for($i 0$i $counts; ++$i){
                if (
$o == 1){
                        
$output .= rand(09);
                }
                else{
                        
$o++;
                        
$output .= $str[rand(025)];
                }
                
$o rand(01);
        }
        return 
$output;
}

$db mysql_connect($cfg_realmdb[db_host], $cfg_realmdb[db_username], $cfg_realmdb[db_password], true);
mysql_select_db($realmd[db_name], $db);

//this is where user fill in and send by email
if ($_POST[password_takeback]){
        
$username mysql_escape_string($_POST[username]);
        
$email mysql_escape_string($_POST[email]);
        
$check_account mysql_query("SELECT id FROM `account` WHERE username='".$username."' AND email='".$email."'"$db);
        if(isset(
$_POST['username']) && isset($_POST['email']) && mysql_num_rows($check_account)){
                
$newpass random_string(8);
                
$newhash sha_pass($newpass);
                
mysql_query("UPDATE `account` SET sha_pass_hash='".$newhash."' WHERE username='".$username."'"$db);
                
$to mysql_escape_string($_POST["email"]);
                
$from "From: $config[email_from]";
                
$subject $cfg_mail[email_subject];
                
$message"Bonjour ".$username.",

Vous avez demandé une récupération de mot de passe pour votre compte sur le royaume "
.$cfg_server_name.".
Voici vos nouvelles informations de connexion :
Nom d'utilisateur : "
.$username."
Mot de passe : "
.$newpass."

En cas de problème, contactez nous !

Bon jeu sur "
.$cfg_server_name." !";

                
mail($to$subject$message$from);
                
$out "Un email vous a été envoyé avec vos informations de connexion.
                                        <i>Note : Si vous ne recevez pas le mail, vérifiez qu'il n'ait pas été bloqué par votre filtre anti-spam.
                                        Sinon, veuillez nous contacter.</i>"
;
        }else{
                
$out "Informations erronées, veuillez vérifier l'email ou le nom de compte.";
        }
}
else{
        
$out '
                <form action="'
.$_SERVER[PHP_SELF]'" method="POST">
                        Adresse Email : <input type="text" name="email">
                        Nom de compte : <input type="text" name="username">
                        <input type="submit" name="password_takeback">
                </form>'
;
}

mysql_close($db);
print 
$out;
?>

Sources : http://getmangos.com/community/topic/115...r-website/ | corrigé par benjy
Merci pour ce partage très utile pour certains.
Système à améliorer... on ne montre JAMAIS le nouveau mot de passe.

La procédure normale est :

- Génération du nouveau mot de passe aléatoire (min. 8 caractère majuscules + minuscules + chiffre).
- Update du compte avec le nouveau sha_pass_hash dans realmd (+ reset sessionKey aussi à 0 dans la base account)
- Envoi du mail contenant le nouveau MDP.
- Notification de l'envoi à ladresse associée au compte.

Ca évite le vol de compte ....
[code=php]'[$serveur] Votre nouveau mot de passe !'[/code]
Les $ ne sont pas remplacées avec des apostrophes.
+1 !
Et cette notation n'est pas super Erf, préférez les mettre à l’extérieur des chaines de caractères.
Sujet nettoyé, les demandes d'aide c'est pas ici qu'on les fait Clin.
Bonjour,

Petit nettoyage du code, suppression des éléments qui me semblent inutiles, éclaircissement du code, et crrections multiples.
Je n'ai pas testé, il est possible qu'ils restent une ou deux erreurs.
[code=php]
<?php
// Configuration
$cfg_server_name = ''; // Nom de votre serveur
$cfg_realmdb = array(
'db_host'=> 'localhost', //Hôte BDD
'db_username' => 'root',//Utilisateur BDD
'db_password' => '',//Mot de passe BDD
'db_name'=> 'realmd',//Nom de la base de données Reamld
);
$cfg_mail = array(
'path_to_thisfile' => 'http://monsite.com/lostPass.php', // Le chemin vers le fichier contenant le script
'email_from' => '', // Adresse email qui enverra les mails
'email_subject' => '['.$cfg_server_name.'] Réinitialisation de mot de passe', // Sujet du mail
);

// FIN DE CONFIGURATION
/************************************************************​*********************/
// Implémentation

function sha_pass($user, $pass){
return sha1(strtoupper($user).':'.strtoupper($pass));
}

function random_string($counts){
$str = "abcdefghijklmnopqrstuvwxyz";//Count 0-25
for($i = 0; $i < $counts; ++$i){
if ($o == 1){
$output .= rand(0, 9);
}
else{
$output .= $str[rand(0, 25)];
}
$o = rand(0, 1);
}
return $output;
}

$db = mysql_connect($cfg_realmdb["db_host"], $cfg_realmdb["db_username"], $cfg_realmdb["db_password"], true);
mysql_select_db($cfg_realmdb["db_name"], $db);

//this is where user fill in and send by email
if ($_POST['password_takeback']){
$username = trim(mysql_escape_string($_POST['username']));
$email = trim(mysql_escape_string($_POST['email']));
$check_account = mysql_query("SELECT id FROM `account` WHERE username='".$username."' AND email='".$email."'", $db);
if(isset($_POST['username']) && isset($_POST['email']) && mysql_num_rows($check_account)){
$newpass = random_string(8);
$newhash = sha_pass($username, $newpass);
mysql_query("UPDATE `account` SET sha_pass_hash='".$newhash."' WHERE username='".$username."'", $db);
$to = mysql_escape_string($_POST["email"]);
$from = "From: $cfg_mail['email_from']";
$subject = $cfg_mail['email_subject'];
$message= "Bonjour ".$username.",

Vous avez demandé une récupération de mot de passe pour votre compte sur le royaume ".$cfg_server_name.".
Voici vos nouvelles informations de connexion :
Nom d'utilisateur : ".$username."
Mot de passe : ".$newpass."

En cas de problème, contactez nous !

Bon jeu sur ".$cfg_server_name." !";

mail($to, $subject, $message, $from);
$out = "Un email vous a été envoyé avec vos informations de connexion.<br>
<em>Note : Si vous ne recevez pas le mail, vérifiez qu'il n'ait pas été bloqué par votre filtre anti-spam.
Sinon, veuillez nous contacter.</em>";
}else{
$out = "Informations erronées, veuillez vérifier l'email ou le nom de compte.";
}
}
else{
$out = '
<form action="'.$_SERVER["PHP_SELF"].'" method="POST">
Adresse Email : <input type="text" name="email"><br>
Nom de compte : <input type="text" name="username"><br>
<input type="submit" name="password_takeback">
</form>';
}

mysql_close($db);
print $out;
?>
[/code]
marche pas dutout benjy desoler
Merci de me donner l'erreur !
Car un "marche pas du tout" ne m'aide pas !
bha, le formulaire ne s'affiche pas

Retourner en haut Accueil