Maison  >  Article  >  développement back-end  >  Explication détaillée des exemples de vérification des e-mails PHP

Explication détaillée des exemples de vérification des e-mails PHP

墨辰丷
墨辰丷original
2018-06-02 09:20:291793parcourir

Cet article présente principalement en détail des exemples de vérification des e-mails PHP et vous guide étape par étape à travers des exemples pour comprendre le processus de vérification des e-mails PHP. Les amis intéressés peuvent se référer à

La chose la plus importante dans l'enregistrement des utilisateurs. L'une des vérifications de sécurité courantes est la vérification des e-mails. Selon les pratiques courantes de l'industrie, la vérification des e-mails est une pratique très importante pour éviter les risques de sécurité potentiels. Discutons maintenant de ces meilleures pratiques et voyons comment créer une vérification des e-mails en PHP.

Commençons par un formulaire d'inscription :

<form method="post" action="http://mydomain.com/registration/">
 <fieldset class="form-group">
 <label for="fname">First Name:</label>
 <input type="text" name="fname" class="form-control" required />
  </fieldset>

  <fieldset class="form-group">
 <label for="lname">Last Name:</label>
 <input type="text" name="lname" class="form-control" required />
  </fieldset>

  <fieldset class="form-group">
 <label for="email">Last name:</label>
 <input type="email" name="email" class="form-control" required />
  </fieldset>

  <fieldset class="form-group">
 <label for="password">Password:</label>
 <input type="password" name="password" class="form-control" required />
  </fieldset>

  <fieldset class="form-group">
 <label for="cpassword">Confirm Password:</label>
 <input type="password" name="cpassword" class="form-control" required />
  </fieldset>

  <fieldset>
    <button type="submit" class="btn">Register</button>
  </fieldset>
</form>

Vient ensuite la structure des tables de la base de données :

CREATE TABLE IF NOT EXISTS `user` (
 `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 `fname` VARCHAR(255) ,
 `lname` VARCHAR(255) ,
 `email` VARCHAR(50) ,
 `password` VARCHAR(50) ,
 `is_active` INT(1) DEFAULT &#39;0&#39;,
 `verify_token` VARCHAR(255) ,
 `created_at` TIMESTAMP,
 `updated_at` TIMESTAMP,
);

Une fois ce formulaire soumis, nous devons pour vérifier la saisie de l'utilisateur et créer un nouvel utilisateur :

// Validation rules
$rules = array(
  &#39;fname&#39; => &#39;required|max:255&#39;,
  &#39;lname&#39; => &#39;required|max:255&#39;,
 &#39;email&#39; => &#39;required&#39;,
 &#39;password&#39; => &#39;required|min:6|max:20&#39;,
 &#39;cpassword&#39; => &#39;same:password&#39;
);

$validator = Validator::make(Input::all(), $rules);

// If input not valid, go back to registration page
if($validator->fails()) {
 return Redirect::to(&#39;registration&#39;)->with(&#39;error&#39;, $validator->messages()->first())->withInput();
}

$user = new User();
$user->fname = Input::get(&#39;fname&#39;);
$user->lname = Input::get(&#39;lname&#39;);
$user->password = Input::get(&#39;password&#39;);

// You will generate the verification code here and save it to the database

// Save user to the database
if(!$user->save()) {
 // If unable to write to database for any reason, show the error
 return Redirect::to(&#39;registration&#39;)->with(&#39;error&#39;, &#39;Unable to write to database at this time. Please try again later.&#39;)->withInput();
}

// User is created and saved to database
// Verification e-mail will be sent here

// Go back to registration page and show the success message
return Redirect::to(&#39;registration&#39;)->with(&#39;success&#39;, &#39;You have successfully created an account. The verification link has been sent to e-mail address you have provided. Please click on that link to activate your account.&#39;);

Après l'inscription, le compte de l'utilisateur reste invalide jusqu'à ce que l'e-mail de l'utilisateur soit vérifié. Cette fonctionnalité confirme que l'utilisateur est le propriétaire de l'adresse e-mail saisie et aide à prévenir le spam, l'utilisation non autorisée du courrier électronique et la divulgation d'informations.

L'ensemble du processus est très simple : lorsqu'un nouvel utilisateur est créé, un e-mail contenant un lien de vérification sera envoyé à l'adresse e-mail renseignée par l'utilisateur lors du processus d'inscription. Avant que l'utilisateur ne clique sur le lien de vérification de l'e-mail et ne confirme l'adresse e-mail, l'utilisateur ne peut pas se connecter et utiliser l'application du site Web.

Il y a plusieurs choses à noter concernant les liens vérifiés. Le lien vérifié doit contenir un jeton généré aléatoirement, suffisamment long et valable uniquement pendant une certaine période de temps. Ceci est effectué pour empêcher les attaques de réseau. Dans le même temps, la vérification des e-mails doit également inclure l'identifiant unique de l'utilisateur, afin d'éviter les dangers potentiels d'attaque de plusieurs utilisateurs.

Voyons maintenant comment générer un lien de vérification en pratique :

// We will generate a random 32 alphanumeric string
// It is almost impossible to brute-force this key space
$code = str_random(32);
$user->confirmation_code = $code;

Une fois cette vérification créée, stockez-la dans la base de données et envoyez-la à l'utilisateur :

Mail::send(&#39;emails.email-confirmation&#39;, array(&#39;code&#39; => $code, &#39;id&#39; => $user->id), function($message)
{
$message->from(&#39;my@domain.com&#39;, &#39;Mydomain.com&#39;)->to($user->email, $user->fname . &#39; &#39; . $user->lname)->subject(&#39;Mydomain.com: E-mail confirmation&#39;);
});

Contenu de la vérification de l'e-mail :

<!DOCTYPE html>
<html lang="en-US">
 <head>
 <meta charset="utf-8" />
 </head>

 <body>
 <p style="margin:0">
  Please confirm your e-mail address by clicking the following link:
  <a href="http://mydomain.com/verify?code=<?php echo $code; ?>&user=<?php echo $id; ?>"></a>
 </p>
 </body>
</html>

Vérifions maintenant si c'est possible :

$user = User::where(&#39;id&#39;, &#39;=&#39;, Input::get(&#39;user&#39;))
  ->where(&#39;is_active&#39;, &#39;=&#39;, 0)
  ->where(&#39;verify_token&#39;, &#39;=&#39;, Input::get(&#39;code&#39;))
  ->where(&#39;created_at&#39;, &#39;>=&#39;, time() - (86400 * 2))
  ->first();

if($user) {
 $user->verify_token = null;
 $user->is_active = 1;

 if(!$user->save()) {
 // If unable to write to database for any reason, show the error
 return Redirect::to(&#39;verify&#39;)->with(&#39;error&#39;, &#39;Unable to connect to database at this time. Please try again later.&#39;);
 }

 // Show the success message
 return Redirect::to(&#39;verify&#39;)->with(&#39;success&#39;, &#39;You account is now active. Thank you.&#39;);
}

// Code not valid, show error message
return Redirect::to(&#39;verify&#39;)->with(&#39;error&#39;, &#39;Verification code not valid.&#39;);

Conclusion :
Le code affiché ci-dessus est juste un exemple de tutoriel et n’a pas été testé de manière adéquate. Veuillez le tester avant de l'utiliser dans votre application Web. Le code ci-dessus est réalisé dans le framework Laravel, mais vous pouvez facilement le migrer vers d'autres frameworks PHP. Dans le même temps, le lien de vérification est valable 48 heures et expire ensuite. L'introduction d'une file d'attente de travail peut gérer les liens de vérification expirés en temps opportun.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.

Recommandations associées :

Mise en œuvre d'une méthode de calcul du code de vérification de la carte d'identité basée sur PHP

Le temps d'exécution de quatre algorithmes de tri de base implémentés dans Comparaison PHP (à lire absolument)

Méthode d'utilisation du verrouillage pour implémenter la fonction de capture de code sous concurrence basée sur PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn