Valider son compte avec un mail

Par Clouder le 09 Nov 2019 (Édité) 8 +99

Dans cet article nous allons développer un système qui permettra d'envoyer un mail à votre nouvel utilisateur avec une clé afin de confirmer son compte sur votre site.


Pour commencer il faudra créer 2 nouvelles colonnes dans votre table utilisateur :

  • token de type text
  • confirmation_token de type datetime


Page inscription.php


Dans cette page nous allons ajouter une fonction pour générer une clé (votre token) et faire un envoi de mail contenant le lien afin de valider le compte.


Avant d'insérer les informations pour notre nouvel utilisateur nous allons commencer par générer notre token. Pour cela nous allons utiliser la fonction random_bytes et la fonction bin2hex afin de nous donner une clé.


// bin2hex(random_bytes($length))
$token = bin2hex(random_bytes(12));

// Exemples:
// 39e9289a5b8328ecc4286da11076748716c41ec7fb94839a689f7dac5cdf5ba8bdc9a9acdc95b95245f80a00

// On insert nos données dans la table utilisateur
$DB->insert("INSERT INTO utilisateur (nom, prenom, mail, mdp, date_creation_compte, token) VALUES 
    (?, ?, ?, ?, ?, ?)", 
    array($nom, $prenom, $mail, $mdp, $date_creation_compte, $token));


N'oubliez pas d'enregistrer votre clé dans votre base de données.


Ensuite nous allons passer à l'envoi du mail qui contiendra un lien qui permettra de valider le compte. Juste avant de faire cela nous allons rechercher l'identifiant unique de la personne que nous venons de créer afin d'envoyer un lien avec l'identifiant de la personne et le token.


$req = $DB->query("SELECT *
  FROM utilisateur
  WHERE mail = ?",
  array($mail));
  
$req = $req->fetch();

$mail_to = $req['mail']; 

//=====Création du header de l'e-mail.
$header = "From: no-reply@gmail.com\n";
$header .= "MIME-version: 1.0\n";
$header .= "Content-type: text/html; charset=utf-8\n";
$header .= "Content-Transfer-ncoding: 8bit";
//=======

//=====Ajout du message au format HTML          
$contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>
  	<p>Veuillez confirmer votre compte <a href="http://www.domaine.com/conf?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
        			
mail($mail_to, 'Confirmation de votre compte', $contenu, $header);


Maintenant que notre système d'envoi de mail pour valider le compte est opérationnel nous allons créer une nouvelle page que nous allons nommer conf.php et dans cette page nous allons valider le compte de l'utilisateur lorsque celui-ci cliquera sur le lien présent dans le mail qu'il aura reçu.


Page conf.php


Dans un premier temps nous allons récupérer les 2 informations dans l'URL du lien.


$id = (int) $_GET['id'];
$token = (String) htmlentities($_GET['token']); 


Ensuite nous allons vérifier ces informations pour confirmer ou non-confirmer le compte.


if(!isset($id)){
	$valid = false;
	$err_mess = "Le lien est erroné";

}elseif(!isset($token)){
	$valid = false;
	$err_mess = "Le lien est erroné";
}

if($valid){
	$req = $DB->query("SELECT id 
		FROM utilisateur 
		WHERE id = ? AND token = ?"array($id, $token));
		
	$req = $req->fetch();

	if(!isset($req['id'])){
		$valid = false;
		$err_mess = "Le lien est erroné";
	}else{
		$DB->insert("UPDATE utilisateur SET token = NULL, confirmation_token = ? WHERE id = ?", 
	    	array(date('Y-m-d H:i:s'), $req['id']));

	    $info_mess = "Votre compte a bien été validé";
	}  
}


Maintenant nous avons un système de confirmation de compte par mail opérationnel !

Cette pub permet au site de vivre ...

8 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !

Re:


@Pietro-TOME, en général, il faut lire les commentaires précédents avant de poster...

@Jerem971.


Le côté va lire les com... est toujours désagréable surtout que les ayant lu je n'ai pas lu celui là puisque dans un premier temps il faisait référence au commentaire du dessous et ne nécessitait pas une lecture entière donc ;)


@Clouder


De rien je mettrais d'autre modifs dans la topic en question ;)

@Pietro-TOME,


Merci pour ton retour c'est corrigé 👍

Hello @Pietro-TOME,


Merci de lire les commentaires précédents...

Pour le signalement d'erreurs dans les formations, c'est ce topic 😉

Bonjour,


Pseudo n'existe pas à ce stade et il manque un =.


Non pas :


$req = $DB->query("SELECT id, pseudo, mail 
		FROM utilisateur 
		WHERE id = ? AND token ?"array($id, $token));


Mais :


$req = $DB->query("SELECT id
		FROM utilisateur 
		WHERE id = ? AND token = ?"array($id, $token));


Hello @Didoub74,


@Clouder te met déjà à disposition le code gratuitement, sans délais, sans compte Premium, c'est largement suffisant... 🙄

Les liens pour télécharger les codes sources sont disponibles pour certains articles ou il y a présence de beaucoup de codes... Pour cet article, il n'est pas nécessaire de mettre un lien de téléchargement... C'est quand même mieux d'apprendre en réécrivant le code qu'en le récupérant...

Pour tous ce qui est erreurs dans les formations, c'est ce topic !

Salut on le place où l'envoie du mail dans le code (pourrait tu faire les code déjà prêt comme dans les autres tuto stp !)

Pour le mail il faudrait mettre ça car sinon ça ne marche pas :

$header = "From: didoub74 <no-reply@gmail.fr>

Cette pub permet au site de vivre ...