Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Beispiele zur PHP-E-Mail-Verifizierung

Detaillierte Erläuterung der Beispiele zur PHP-E-Mail-Verifizierung

墨辰丷
墨辰丷Original
2018-06-02 09:20:291809Durchsuche

In diesem Artikel werden hauptsächlich Beispiele für die PHP-E-Mail-Überprüfung im Detail vorgestellt und Sie werden Schritt für Schritt durch Beispiele geführt, um den Prozess der PHP-E-Mail-Überprüfung zu verstehen.

Das Wichtigste bei der Benutzerregistrierung Eine der häufigsten Sicherheitsüberprüfungen ist die E-Mail-Überprüfung. Den gängigen Branchenpraktiken zufolge ist die E-Mail-Verifizierung eine sehr wichtige Vorgehensweise, um potenzielle Sicherheitsrisiken zu vermeiden. Lassen Sie uns nun diese Best Practices besprechen und sehen, wie man eine E-Mail-Verifizierung in PHP erstellt.

Beginnen wir mit einem Registrierungsformular:

<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>

Als nächstes folgt die Tabellenstruktur der Datenbank:

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,
);

Sobald dieses Formular gesendet wurde, müssen wir die Eingabe- und Eingabedaten des Benutzers überprüfen Erstellen Sie einen neuen Benutzer:

// 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;);

Nach der Registrierung bleibt das Konto des Benutzers ungültig, bis die E-Mail-Adresse des Benutzers überprüft wird. Diese Funktion bestätigt, dass der Benutzer der Eigentümer der eingegebenen E-Mail-Adresse ist und trägt dazu bei, Spam und unbefugte E-Mail-Nutzung und Informationsoffenlegung zu verhindern.

Der gesamte Vorgang ist sehr einfach: Wenn ein neuer Benutzer erstellt wird, wird eine E-Mail mit einem Bestätigungslink an die E-Mail-Adresse gesendet, die der Benutzer während des Registrierungsprozesses eingegeben hat. Bevor der Benutzer auf den E-Mail-Bestätigungslink klickt und die E-Mail-Adresse bestätigt, kann er sich nicht anmelden und die Website-Anwendung nicht verwenden.

Bei verifizierten Links gibt es mehrere Dinge zu beachten. Der verifizierte Link muss einen zufällig generierten Token enthalten, der lang genug und nur für einen bestimmten Zeitraum gültig ist. Dies geschieht, um Netzwerkangriffe zu verhindern. Gleichzeitig muss die E-Mail-Verifizierung auch die eindeutige Kennung des Benutzers enthalten, um potenzielle Gefahren durch Angriffe mehrerer Benutzer zu vermeiden.

Jetzt sehen wir uns an, wie man in der Praxis einen Verifizierungslink generiert:

// 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;

Sobald diese Verifizierung erstellt ist, speichern Sie sie in der Datenbank und senden Sie sie an den Benutzer:

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;);
});

Inhalt der E-Mail-Verifizierung:

<!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>

Jetzt überprüfen wir, ob es funktioniert:

$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;);

Fazit:
Der oben gezeigte Code ist nur ein Tutorial-Beispiel und funktioniert nicht Bestehen Sie genügend Tests. Bitte testen Sie es, bevor Sie es in Ihrer Webanwendung verwenden. Der obige Code wird im Laravel-Framework erstellt, Sie können ihn jedoch problemlos auf andere PHP-Frameworks migrieren. Gleichzeitig ist der Verifizierungslink 48 Stunden lang gültig und verfällt danach. Durch die Einführung einer Arbeitswarteschlange können abgelaufene Verifizierungslinks zeitnah bearbeitet werden.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

Implementierung der Methode zur Berechnung des ID-Karten-Verifizierungscodes basierend auf PHP

Die Laufzeit von vier grundlegenden Sortieralgorithmen wurde implementiert im PHP-Vergleich (muss gelesen werden)

Methode zur Verwendung von Sperren zur Implementierung der Code-Grabbing-Funktion unter Parallelität basierend auf PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele zur PHP-E-Mail-Verifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn