So richten Sie die E-Mail-Verifizierung in PHP über ein Verifizierungstoken ein: Vollständige Anleitung

王林
Freigeben: 2024-08-11 20:32:32
Original
320 Leute haben es durchsucht

How to Set up Email Verification in PHP via a Verification Token: Complete Guide

Bei der E-Mail-Verifizierung wird sichergestellt, dass eine E-Mail-Adresse vorhanden ist und E-Mails empfangen kann. Bei der E-Mail-Validierung wird hingegen geprüft, ob die Adresse richtig formatiert ist. das heißt - geschrieben nach bestimmten Standards (z. B. UTF-8). 

In diesem Artikel werde ich über die PHP-E-Mail-Verifizierung und deren Verwendung für die Webentwicklung und Benutzerauthentifizierung über ein Verifizierungstoken sprechen. Der Artikel enthält einige Mikro-Tutorials, darunter:

  • PHPMailer-Konfiguration mit Mailtrap

  • Eine einfache HTML-Formularerstellung

  • Grundlegende Überprüfung der E-Mail-Adresse 

  • Tokens und Anmeldeinformationen in einer SQL-Datenbank generieren und speichern

  • E-Mail-Bestätigung mit einem Bestätigungstoken senden

  • E-Mail-Tests im Zusammenhang mit der Verifizierung 

Also, lasst uns loslegen. 

E-Mail-Versand einrichten

Um Bestätigungs-E-Mails zu senden, können Sie die in PHP integrierte Funktion mail() oder eine Bibliothek wie PHPMailer verwenden, die mehr Funktionen und eine höhere Zuverlässigkeit bietet.

Da ich das Tutorial so sicher und produktionsbereit wie möglich machen möchte, verwende ich „PHPMailer“. Überprüfen Sie den Code zur Installation von PHPMailer über Composer:

Komponisten benötigen phpmailer/phpmailer

Warum Mailtrap API/SMTP verwenden?

Es handelt sich um eine E-Mail-Zustellungsplattform, mit der Sie Ihre E-Mails an einem Ort testen, senden und steuern können. Und unter anderem erhalten Sie Folgendes:

Vorgefertigte Konfigurationseinstellungen für verschiedene Sprachen, inklusive PHP und Laravel.

SMTP und API mit SDKs in den wichtigsten Sprachen, einschließlich PHP. 

Branchenbeste Analyse. 

Menschliche Unterstützung rund um die Uhr und beschleunigtes Verfahren für dringende Fälle. 

All das ermöglicht es Ihnen, den E-Mail-Verifizierungsprozess zu beschleunigen und ihn für alle sicher und stabil zu halten.

Weiter zu den Einstellungen zum Konfigurieren von PHPMailer mit Mailtrap:

$phpmailer = new PHPMailer();
$phpmailer->isSMTP();
$phpmailer->Host = 'live.smtp.mailtrap.io';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'api';
$phpmailer->Password = 'YOUR_MAILTRAP_PASSWORD';
Nach dem Login kopieren

Hier ist das PHPMailer-Setup:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

function sendVerificationEmail($email, $verificationCode) {
    $mail = new PHPMailer(true);

    try {
        // Server settings
        $mail->isSMTP();
        $mail->Host = 'live.smtp.mailtrap.io';
        $mail->SMTPAuth = true;
        $mail->Username = 'api';
        $mail->Password = 'YOUR_MAILTRAP_PASSWORD';
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = 587;

        // Recipients
        $mail->setFrom('youremail@example.com', 'Your Website');
        $mail->addAddress($email);

        // Content
        $mail->isHTML(false);
        $mail->Subject = 'Email Verification';
        $mail->Body    = "Your verification code is: $verificationCode";

        $mail->send();
        return true;
    } catch (Exception $e) {
        return false;
    }
}
Nach dem Login kopieren

Beachten Sie, dass der obige Code das Verifizierungstoken nicht sendet (klicken Sie hier, um zum Codeausschnitt mit dem Verifizierungstoken zu springen). Es handelt sich lediglich um ein Beispiel für die Einrichtung von Mailtrap SMTP und die Definition der Verifizierungsfunktion. Hier ist eine kurze Aufschlüsselung der wichtigsten Punkte:

  • PHPMailer- und Exception-Klassen werden importiert.

  • sendVerificationEmail($email, $verificationCode) ist die Funktionsdefinition. 

  • Ein neues PHPMailer-Objekt wird erstellt. 

  • Der Try-Catch-Block behandelt Ausnahmen beim E-Mail-Versand.

  • Die Servereinstellungen sind gemäß der Beispielkonfiguration auf Mailtrap eingestellt. 

  • Der E-Mail-Inhalt ist für Nur-Text auf isHTML(false) gesetzt. 

Tipps: 

  • Der E-Mail-Inhalt kann in HTML umgestaltet werden. 

  • Aufgrund von Durchsatzbeschränkungen sollten Sie gmail.com nicht als SMTP-Relay für das Anmeldeformular verwenden. Wenn Sie jedoch wirklich eine Mailer-PHP-Datei erstellen und über Gmail versenden möchten, schauen Sie sich dieses Tutorial an. 

Erstellen eines Anmeldeformulars

Das Folgende ist ein einfaches Registrierungsformular, es enthält die Kopfzeile und Benutzerkontoinformationen (Benutzername, E-Mail und Passwort). 

Es gibt kein CSS-Stylesheet oder eine Div-Klasse, da dies nur ein Beispiel ist.

Ich würde Ihnen jedoch raten, diese in die Produktion einzubeziehen und sie an der Designsprache Ihrer Marke auszurichten. Andernfalls sieht Ihr Formular möglicherweise unprofessionell aus und Benutzer würden sich nur ungern damit befassen.

 

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<body>
    <form action="register.php" method="post">
        <label>Username:</label>
        <input type="text" name="username" required>
        <br>
        <label>Email:</label>
        <input type="email" name="email" required>
        <br>
        <label>Password:</label>
        <input type="password" name="password" required>
        <br>
        <input type="submit" name="register" value="Register">
    </form>
</body>
</html>
Nach dem Login kopieren

Bonus-Profi-Tipp: Erwägen Sie die Verwendung von JavaScript in Ihren Formularen 

Wenn Sie eine vollständige Anleitung zum Erstellen eines PHP-Kontaktformulars mit reCaptcha wünschen, schauen Sie sich das Video unten an ⬇️. 

  • JS kann Benutzereingaben in Echtzeit validieren und so sofortiges Feedback zu Fehlern geben, ohne dass die Seite neu geladen werden muss. 

  • Durch das Erkennen von Fehlern auf der Clientseite kann JS die Anzahl ungültiger Anfragen reduzieren, die an den Server gesendet werden, wodurch die Serverlast reduziert und die Leistung für jede Sitzung verbessert wird.

  • Mit AJAX kann JS Daten vom Server senden und empfangen, ohne die Seite neu laden zu müssen, was für ein reibungsloseres Benutzererlebnis sorgt.

Jetzt gehe ich zur Bestätigung der E-Mail-Adresse über.  

Überprüfung der E-Mail-Adresse

Hier ist ein einfaches Skript zum Überprüfen der Domain und des MX-Eintrags. Grundsätzlich können Sie E-Mails überprüfen, indem Sie eine MX-Suche durchführen.

<?php

// This method checks if the domain part of the email address has a functioning mail server.

$email = "user@example.com";

list($user, $domain) = explode(separator:"@", $email)

if (filter_var($email, filter:FILTER_VALIDATE_EMAIL) && getmxrr($domain, &hosts: $mxhosts)){
    echo "Valid email address with a valid mail server" . PHP_EOL;
} else {
    echo "Invalid email address or no valid mail server found" . PHP_EOL;
}
Nach dem Login kopieren

Das Skript sendet jedoch keine E-Mails zur Benutzeraktivierung und -authentifizierung. Außerdem speichert es keine Daten in MySQL. 

Dafür werde ich in den nächsten Abschnitten Folgendes tun: 

  • Generieren Sie ein Bestätigungstoken 

  • Erstellen Sie ein PHP-MySQL-Schema, um die Anmeldeinformationen aus dem Registrierungsformular zu speichern

  • Send the verification email with the token

  • Verify the verification token

Tip: Similar logic can be applied to a logout/login form.

Generating verification token

A verification token is a unique string generated for each user during registration. This token is included in the verification email and there are two methods to generate it.

Method 1

The first method leverages the bin2hex command to create a random token with the parameter set to (random_bytes(50)).

 

$token = bin2hex(random_bytes(50));
Nach dem Login kopieren

Method 2

Alternatively, you can generate the token with the script below. And I’ll be using that script in the email-sending script.

<?php
function generateVerificationCode($length = 6) {
    $characters = '0123456789';
    $code = '';
    for ($i = 0; $i < $length; $i++) {
        $code .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $code;
}
?>
Nach dem Login kopieren

Storing verification token

Before sending the verification email, it’s vital to ensure you properly handle and store user data. I’ll use a simple SQL schema to create the users table and store the generated token in the database along with the user's registration information.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    token VARCHAR(255) DEFAULT NULL,
    is_verified TINYINT(1) DEFAULT 0
);
Nach dem Login kopieren

Quick breakdown: 

The script above creates a users table with the following columns:

  • id - Unique identifier for each user, automatically incremented.

  • username - The user's username; it cannot be null.

  • email - The user's email address; it cannot be null.

  • password - The user's password (hashed); it cannot be null.

  • token - A verification token, which can be null.

  • is_verified - A flag indicating whether the user is verified (0 for not verified, 1 for verified), with a default value of 0.

Sending verification token 

Overall, the script below is amalgamation of everything previously discussed in the article and it’s designed to: 

  • Generate a random numeric verification code. 

  • Send the verification email to a specified email address using PHPMailer.

  • Configure the email server settings. 

  • Handle potential errors. 

  • Provide feedback on whether the email was successfully sent.

Note that the script is geared towards Mailtrap users and it leverages the SMTP method.

<?php

require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP
use PHPMailer\PHPMailer\Exception;

//Function to generate a random verification code
1 usage
function generateVerificationCode($length = 6) {
    $characters = '0123456789';
    $code = '';
    for ($i = 0; $i < $length; $i++) {
        $code .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $code;
}

// Function to send a verification email using PHPMailer
1 usage
function sendVerificationEmail($email, $verificationCode) {
    $mail = new PHPMailer (exception: true);

    try {
        // Server settings
        $mail ->SMTPDebug = SMTP::DEBUG_OFF; // Set to DEBUG_SERVER for debugging
        $mail ->isSMTP();
        $mail ->Host = 'live.smtp.mailtrap.io'; // Mailtrap SMTP server host 
        $mail ->SMTPAuth = true;
        $mail ->Username = 'api'; // Your Mailtrap SMTP username
        $mail ->Password = 'YOUR_MAILTRAP_PASSWORD'; // Your Mailtrap SMTP password
        $mail ->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption
        $email ->Port = 587; // TCP port to connect to

        //Recipients
        $mail->setFrom(address:'mailtrapclub@gmail.com', name:"John Doe"); //Sender's email and name
        $mail->addAddress($email); // Recipient's email

        //Content
        $mail->isHTML(isHTML:false); //Set to true if sending HTML email
        $mail->Subject = 'Email Verification';
        $mail->Body = "Your verification code is: $verificationCode";

        $mail->send();
        return true;
    }catch (Exception $e) {
        return false;
    }
}

//Example usage
$email = "mailtrapclub+test@gmail.com"
$verificationCode = generateVerificationCode();

if (sendVerificationEmail($email,$verificationCode)){
    echo "A verification email has been sent to $email. Please check your inbox and enter the code to verrify your email." . PHP_EOL;
} else {
    echo "Failed to send the verification email. Please try again later." . PHP_EOL;
}
Nach dem Login kopieren

Verifying verification token

Yeah, the title is a bit circular, but that’s exactly what you need. The script below enables the “verification of verification” flow ? that moves like this:

  • A user hits the verification link.
  • The token gets validated.
  • The user’s email is marked as verified in the database.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "user_verification";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_GET['token'])) {
    $token = $_GET['token'];

    $stmt = $conn->prepare("SELECT * FROM users WHERE token=? LIMIT 1");    $stmt->bind_param("s", $token);    $stmt->execute();
    $result = $stmt->get_result();
    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();        $stmt->close();
        $stmt = $conn->prepare("UPDATE users SET is_verified=1, token=NULL WHERE id=?");        $stmt->bind_param("i", $user['id']);

        if ($stmt->execute() === TRUE) {
            echo "Email verification successful!";
        } else {
            echo "Error: " . $conn->error;
        }        $stmt->close();
    } else {
        echo "Invalid token!";
    }
}

$conn->close();
?>
Nach dem Login kopieren

We appreciate you chose this article to know more about php email verification. To continue reading the article and discover more articles on related topics, follow Mailrap Blog!

Das obige ist der detaillierte Inhalt vonSo richten Sie die E-Mail-Verifizierung in PHP über ein Verifizierungstoken ein: Vollständige Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!