Vérification des e-mails PHP

Résumé: dans ce tutoriel, vous apprendrez à vérifier l’adresse e-mail du nouveau compte en toute sécurité à l’aide d’un lien d’activation.

Introduction à la vérification des e-mails PHP pour les nouveaux comptes

Dans les tutoriels précédents, vous avez appris à créer un formulaire d’inscription qui permet aux utilisateurs de s’inscrire à des comptes. Et vous avez également appris à créer un formulaire de connexion qui permettra aux utilisateurs d’utiliser le nom d’utilisateur et le mot de passe pour se connecter.

Lorsque les utilisateurs s’inscrivent pour de nouveaux comptes, ils entrent leurs adresses e-mail. Cependant, les utilisateurs peuvent entrer n’importe quelle adresse e-mail car le système ne vérifie pas les e-mails.

Pour vérifier les adresses e-mail des utilisateurs, vous pouvez envoyer un e-mail de vérification à ces adresses e-mail et demander aux utilisateurs d’ouvrir leurs e-mails et de cliquer sur un lien d’activation.

Pour le faire, vous suivez les étapes suivantes lorsque les utilisateurs enregistrent des comptes:

  • Générez un code d’activation unique et définissez un délai d’expiration, par exemple un jour.
  • Enregistrez l’enregistrement utilisateur dans la base de données et marquez le statut de l’utilisateur comme inactif. Enregistrez également le hachage du code d’activation & délai d’expiration.
  • Envoyez un e-mail avec le lien d’activation à l’adresse e-mail de l’utilisateur. Le lien d’activation contiendra l’adresse e-mail et le code d’activation, par ex., https://app.com/activate.php?email=email&activation_code=abcd
  • Informez l’utilisateur d’activer le compte par e-mail.

Le hachage du code d’activation garantit que seul l’utilisateur propriétaire de l’adresse e-mail peut activer le compte, pas personne d’autre, même l’administrateur, qui peut accéder à la base de données.

Si les utilisateurs n’ont pas activé leur compte, ils ne pourront pas se connecter.

Lorsque les utilisateurs cliquent sur le lien d’activation dans l’e-mail, vous devez effectuer les étapes suivantes:

  • Désinfectez et validez l’e-mail et le code d’activation.
  • Recherchez l’utilisateur inactif avec l’adresse e-mail. Si aucun enregistrement d’utilisateur n’existe, redirigez-le vers le formulaire d’inscription.
  • Si un enregistrement utilisateur existe et que le code d’activation a expiré, supprimez l’enregistrement utilisateur de la base de données et redirigez-le vers le formulaire d’inscription.
  • Sinon, faites correspondre le code d’activation avec le hachage du code d’activation stocké dans la base de données. S’ils correspondent, marquez l’enregistrement utilisateur comme actif et redirigez-le vers la page de connexion.

Recréez la table des utilisateurs

Tout d’abord, supprimez la table users de la base de données auth:

Code language: SQL (Structured Query Language) (sql)

Deuxièmement, créez la table users avec les nouvelles colonnes active, activation_code, activation_at, activation_expiry:

Code language: SQL (Structured Query Language) (sql)

Ce qui suit explique la signification des nouvelles colonnes.

La valeur de la colonne active est 0 par défaut. Cela signifie que les utilisateurs qui s’inscrivent à des comptes mais qui n’ont pas vérifié leurs adresses e-mail seront inactifs par défaut.

La colonne activation_code stockera le hachage du code d’activation. Sa longueur doit être suffisante pour stocker la chaîne renvoyée par la fonction password_hash().

Il est important de noter que le hachage sera tronqué si la colonne activation_code n’a pas une taille assez longue. Cela entraînera l’échec de la fonction password_verify() pour faire correspondre le code d’activation avec le hachage.

La colonne activation_expiry stocke le délai d’expiration pour utiliser le code d’activation avant l’expiration. Le délai d’expiration garantit que le code d’activation ne peut pas être utilisé si l’adresse e-mail est compromise après le délai d’expiration.

La colonne activated_at stocke la date et l’heure auxquelles les utilisateurs activent leurs comptes.

Structure du projet

Passons en revue la structure actuelle du projet avant d’ajouter les fonctions de vérification des e-mails:

Code language: PHP (php)

Modifiez les fonctions dans auth.fichier php

Ce qui suit ajoute le code d’activation et le paramètre d’expiration à la fonction register_user(). Par défaut, le délai d’expiration est d’un jour (1 * 24 * 60 * 60).

Code language: PHP (php)

La fonction register_user() utilise la fonction password_hash() pour hacher le code d’activation.

La fonction find_user_by_username() inclut la colonne active dans le résultat:

Code language: PHP (php)

Ce qui suit définit une nouvelle fonction is_user_active() qui renvoie true si un utilisateur est actif:

Code language: PHP (php)

La fonction login() doit permettre uniquement aux utilisateurs actifs de se connecter:

Code language: PHP (php)

Définir les fonctions qui traitent de la vérification des e-mails

Nous ajouterons les fonctions qui traitent de la vérification des e-mails au fichier auth.php.

Tout d’abord, créez un nouveau fichier app.php dans le dossier config et définissez les constantes suivantes:

Code language: PHP (php)

Nous utiliserons ces constantes pour envoyer des e-mails d’activation aux utilisateurs. Pour utiliser ces constantes, vous devez inclure le fichier app.php dans le fichier bootstrap.php:

Code language: PHP (php)

Deuxièmement, définissez une fonction qui génère un code d’activation aléatoire unique:

Code language: PHP (php)

Troisièmement, définissez une fonction qui envoie une vérification par e-mail avec un lien d’activation.

Code language: PHP (php)

Supposons que l’URL de l’application soit http://localhost/auth, l’URL d’activation ressemblera à ceci:

Code language: PHP (php)

La fonction send_activation_email() utilise la fonction mail() intégrée pour envoyer des e-mails.

Quatrièmement, définissez une fonction qui supprime un utilisateur par id et statut. Par défaut, il supprime un utilisateur inactif par id.

Code language: PHP (php)

Cinquièmement, définissez une fonction qui trouve un utilisateur non vérifié par un e-mail et un code d’activation. Si le code d’activation a expiré, la fonction supprime également l’enregistrement utilisateur en appelant la fonction delete_user_by_id().

Code language: PHP (php)

Sixièmement, définissez une nouvelle fonction activate_user() qui active un utilisateur par un id:

Code language: PHP (php)

Modifier le registre.la page php

La src/register.php doit intégrer la logique pour gérer la logique de vérification des e-mails.

Code language: PHP (php)

Comment ça marche.

Tout d’abord, générez un code d’activation:

Code language: PHP (php)

Deuxièmement, enregistrez l’utilisateur avec le code d’activation:

Code language: PHP (php)

Troisièmement, envoyez un e-mail à l’adresse e-mail de l’utilisateur en appelant la fonction send_activation_email():

Code language: PHP (php)

Enfin, redirigez l’utilisateur vers la page de connexion et affichez un message flash qui demande à l’utilisateur d’activer le compte par e-mail:

Code language: PHP (php)

Créez l’activation.page php

Pour permettre aux utilisateurs d’activer leurs comptes après l’enregistrement, vous pouvez créer une nouvelle page activate.php dans le dossier public et utiliser la page suivante:

Code language: PHP (php)

Comment l’activer.php fonctionne.

Tout d’abord, désinfectez et validez l’e-mail et le code d’activation:

Code language: PHP (php)

Deuxièmement, recherchez l’utilisateur non vérifié en fonction de l’e-mail et du code de vérification s’il n’y a pas d’erreurs de validation. Le find_unverified_user() supprimera également l’utilisateur non vérifié si le délai d’expiration est expiré.

Code language: PHP (php)

Troisièmement, activez l’utilisateur et redirigez-le vers le login.page php:

Code language: PHP (php)

Enfin, redirigez vers le registration.php s’il y a une erreur:

Code language: PHP (php)

Dans ce tutoriel, vous avez appris à implémenter la vérification des e-mails pour les comptes d’utilisateurs en PHP.

Leave a Reply