PHP-E-Mail-Überprüfung
Zusammenfassung: In diesem Tutorial erfahren Sie, wie Sie die E-Mail-Adresse des neuen Kontos mithilfe eines Aktivierungslinks sicher überprüfen können.
Einführung in die PHP-E-Mail-Überprüfung für neue Konten
In früheren Tutorials haben Sie gelernt, wie Sie ein Registrierungsformular erstellen, mit dem Benutzer sich für Konten registrieren können. Außerdem haben Sie gelernt, wie Sie ein Anmeldeformular erstellen, mit dem Benutzer den Benutzernamen und das Kennwort zum Anmelden verwenden können.
Wenn sich Benutzer für neue Konten registrieren, geben sie ihre E-Mail-Adressen ein. Benutzer können jedoch eine beliebige E-Mail-Adresse eingeben, da das System E-Mails nicht überprüft.
Um die E-Mail-Adressen von Benutzern zu überprüfen, können Sie eine Bestätigungs-E-Mail an diese E-Mail-Adressen senden und Benutzer auffordern, ihre E-Mails zu öffnen und auf einen Aktivierungslink zu klicken.
Dazu führen Sie die folgenden Schritte aus, wenn Benutzer Konten registrieren:
- Generieren Sie einen eindeutigen Aktivierungscode und legen Sie eine Ablaufzeit fest, z. B. einen Tag.
- Speichern Sie den Benutzerdatensatz in der Datenbank und markieren Sie den Status des Benutzers als inaktiv. Speichern Sie auch den Hash des Aktivierungscodes & Ablaufzeit.
- Senden Sie eine E-Mail mit dem Aktivierungslink an die E-Mail-Adresse des Benutzers. Der Aktivierungslink enthält die E-Mail-Adresse und den Aktivierungscode, z.,
https://app.com/activate.php?email=email&activation_code=abcd
- Informieren Sie den Benutzer, um das Konto per E-Mail zu aktivieren.
Das Hashing des Aktivierungscodes stellt sicher, dass nur der Benutzer, dem die E-Mail-Adresse gehört, das Konto aktivieren kann, und nicht andere Personen, auch nicht der Administrator, der auf die Datenbank zugreifen kann.
Wenn Benutzer kein Konto aktiviert haben, können sie sich nicht anmelden.
Wenn Benutzer auf den Aktivierungslink in der E-Mail klicken, müssen Sie die folgenden Schritte ausführen:
- Bereinigen und validieren Sie die E-Mail und den Aktivierungscode.
- Suchen Sie den inaktiven Benutzer mit der E-Mail-Adresse. Wenn kein Benutzerdatensatz vorhanden ist, leiten Sie zum Registrierungsformular um.
- Wenn ein Benutzerdatensatz vorhanden ist und der Aktivierungscode abgelaufen ist, löschen Sie den Benutzerdatensatz aus der Datenbank und leiten Sie zum Registrierungsformular um.
- Andernfalls ordnen Sie den Aktivierungscode dem Hash des in der Datenbank gespeicherten Aktivierungscodes zu. Wenn sie übereinstimmen, markieren Sie den Benutzerdatensatz als aktiv und leiten Sie zur Anmeldeseite um.
Erstellen Sie die Benutzertabelle neu
Löschen Sie zuerst die Tabelle users
aus der Datenbank auth
:
Code language: SQL (Structured Query Language) (sql)
Zweitens erstellen Sie die Tabelle users
mit den neuen Spalten active
, activation_code
, activation_at
, activation_expiry
:
Code language: SQL (Structured Query Language) (sql)
Im Folgenden wird die Bedeutung der neuen Spalten erläutert.
Der Wert der Spalte active
ist standardmäßig 0. Dies bedeutet, dass Benutzer, die sich für Konten registrieren, ihre E-Mail-Adressen jedoch nicht überprüft haben, standardmäßig inaktiv sind.
In der Spalte activation_code
wird der Hash des Aktivierungscodes gespeichert. Seine Länge sollte ausreichen, um die von der Funktion password_hash()
zurückgegebene Zeichenfolge zu speichern.
Es ist wichtig zu beachten, dass der Hash abgeschnitten wird, wenn die Spalte activation_code
nicht lang genug ist. Dadurch kann die Funktion password_verify()
den Aktivierungscode nicht mit dem Hash abgleichen.
In der Spalte activation_expiry
wird die Ablaufzeit für die Verwendung des Aktivierungscodes vor Ablauf gespeichert. Die Ablaufzeit stellt sicher, dass der Aktivierungscode nicht verwendet werden kann, wenn die E-Mail-Adresse nach Ablauf der Ablaufzeit kompromittiert wird.
In der Spalte activated_at
werden Datum und Uhrzeit gespeichert, zu denen Benutzer ihre Konten aktivieren.
Projektstruktur
Lassen Sie uns die aktuelle Projektstruktur überprüfen, bevor Sie die E-Mail-Verifizierungsfunktionen hinzufügen:
Code language: PHP (php)
Ändern Sie die Funktionen in auth.php-Datei
Im Folgenden werden der Funktion register_user()
der Aktivierungscode und der Ablaufparameter hinzugefügt. Standardmäßig beträgt die Ablaufzeit einen Tag ( 1 * 24 * 60 * 60
).
Code language: PHP (php)
Die Funktion register_user()
verwendet die Funktion password_hash()
, um den Aktivierungscode zu hashen.
Die Funktion find_user_by_username()
enthält die Spalte active
im Ergebnis:
Code language: PHP (php)
Im Folgenden wird eine neue Funktion is_user_active()
definiert, die true zurückgibt, wenn ein Benutzer aktiv ist:
Code language: PHP (php)
Die Funktion login()
sollte nur aktiven Benutzern die Anmeldung ermöglichen:
Code language: PHP (php)
Definieren Sie Funktionen, die sich mit der E-Mail-Überprüfung befassen
Wir fügen die Funktionen, die sich mit der E-Mail-Überprüfung befassen, der Datei auth.php
hinzu.
Erstellen Sie zunächst eine neue Datei app.php
im Ordner config
und definieren Sie die folgenden Konstanten:
Code language: PHP (php)
Wir verwenden diese Konstanten, um Aktivierungs-E-Mails an Benutzer zu senden. Um diese Konstanten zu verwenden, müssen Sie die Datei app.php
in die Datei bootstrap.php
aufnehmen:
Code language: PHP (php)
Zweitens definieren Sie eine Funktion, die einen eindeutig zufälligen Aktivierungscode generiert:
Code language: PHP (php)
Drittens definieren Sie eine Funktion, die eine E-Mail-Bestätigung mit einem Aktivierungslink sendet.
Code language: PHP (php)
Angenommen, die URL der App lautet http://localhost/auth
, die Aktivierungs-URL sieht folgendermaßen aus:
Code language: PHP (php)
Die Funktion send_activation_email()
verwendet die integrierte Funktion mail()
zum Senden von E-Mails.
Viertens definieren Sie eine Funktion, die einen Benutzer nach ID und Status löscht. Standardmäßig wird ein inaktiver Benutzer nach ID gelöscht.
Code language: PHP (php)
Fünftens definieren Sie eine Funktion, die einen nicht verifizierten Benutzer anhand einer E-Mail und eines Aktivierungscodes findet. Wenn der Aktivierungscode abgelaufen ist, löscht die Funktion auch den Benutzerdatensatz, indem sie die Funktion delete_user_by_id()
aufruft.
Code language: PHP (php)
Sechstens definieren Sie eine neue activate_user()
-Funktion, die einen Benutzer durch eine ID aktiviert:
Code language: PHP (php)
Ändern Sie das Register.php-Seite
Die src/register.php
muss die Logik enthalten, um die E-Mail-Bestätigungslogik zu verarbeiten.
Code language: PHP (php)
Wie es funktioniert.
Generieren Sie zunächst einen Aktivierungscode:
Code language: PHP (php)
Zweitens registrieren Sie den Benutzer mit dem Aktivierungscode:
Code language: PHP (php)
Drittens senden Sie eine E-Mail an die E-Mail-Adresse des Benutzers, indem Sie die Funktion send_activation_email()
aufrufen:
Code language: PHP (php)
Leiten Sie den Benutzer schließlich zur Anmeldeseite um und zeigen Sie eine Flash-Nachricht an, in der der Benutzer aufgefordert wird, das Konto per E-Mail zu aktivieren:
Code language: PHP (php)
Erstellen Sie die activate.php-Seite
Damit Benutzer ihre Konten nach der Registrierung aktivieren können, können Sie eine neue activate.php
-Seite im Ordner public
erstellen und die folgende Seite verwenden:
Code language: PHP (php)
Wie die aktivieren.php funktioniert.
Bereinigen und validieren Sie zunächst die E-Mail und den Aktivierungscode:
Code language: PHP (php)
Suchen Sie zweitens den nicht verifizierten Benutzer anhand der E-Mail-Adresse und des Bestätigungscodes, wenn keine Validierungsfehler vorliegen. find_unverified_user()
löscht auch den nicht verifizierten Benutzer, wenn die Ablaufzeit abgelaufen ist.
Code language: PHP (php)
Drittens aktivieren Sie den Benutzer und leiten Sie zum Login um.PHP-Seite:
Code language: PHP (php)
Leiten Sie schließlich zu registration.php
um, wenn ein Fehler vorliegt:
Code language: PHP (php)
In diesem Tutorial erfahren Sie, wie Sie die E-Mail-Überprüfung für Benutzerkonten in PHP implementieren.
Leave a Reply