sql >> Database >  >> RDS >> Mysql

Gebruikersregistratie en e-mailverificatie PHP en MySQL

Ik heb al een blogpost geschreven over het maken van een volledig gebruikersregistratie- en inlogsysteem met PHP en MySQL, maar ik heb geen e-mailverificatie toegevoegd.

Deze tutorial lijkt een beetje op een update van de vorige tutorial. Naast de mogelijkheid om zich te registreren, in te loggen en uit te loggen bij hun account, ontvangt een gebruiker ook een verificatie-e-mail naar zijn e-mailadres met een link waar hij op kan klikken en zijn e-mailadres kan verifiëren.

Bij de meeste toepassingen die u gaat bouwen, is het om vele redenen belangrijk om een ​​functie voor e-mailverificatie toe te voegen:u wilt misschien later een e-mail naar de gebruiker sturen en er zeker van zijn dat ze deze zullen zien; of de gebruiker is mogelijk zijn wachtwoord vergeten en moet het opnieuw instellen, en om dit te doen, moeten we hem een ​​link voor het opnieuw instellen van het wachtwoord e-mailen; er zijn veel andere redenen, maar u begrijpt het punt.

In dit systeem dat we vandaag bouwen, kunnen gebruikers die hun e-mailadres niet hebben geverifieerd, bepaalde acties niet uitvoeren (ik zal alleen een eenvoudige demonstratie gebruiken, zoals het bekijken van een knop. Alleen geverifieerde gebruikers kunnen die knop zien).

Maak om te beginnen een nieuw PHP-project met de naam verificatie-gebruiker en maak in deze map twee bestanden aan:signup.php en login.php.

signup.php:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css" />
  <link rel="stylesheet" href="main.css">
  <title>User verification system PHP</title>
</head>
<body>
  <div class="container">
    <div class="row">
      <div class="col-md-4 offset-md-4 form-wrapper auth">
        <h3 class="text-center form-title">Register</h3>
        <form action="signup.php" method="post">
          <div class="form-group">
            <label>Username</label>
            <input type="text" name="username" class="form-control form-control-lg" value="<?php echo $username; ?>">
          </div>
          <div class="form-group">
            <label>Email</label>
            <input type="text" name="email" class="form-control form-control-lg" value="<?php echo $email; ?>">
          </div>
          <div class="form-group">
            <label>Password</label>
            <input type="password" name="password" class="form-control form-control-lg">
          </div>
          <div class="form-group">
            <label>Password Confirm</label>
            <input type="password" name="passwordConf" class="form-control form-control-lg">
          </div>
          <div class="form-group">
            <button type="submit" name="signup-btn" class="btn btn-lg btn-block">Sign Up</button>
          </div>
        </form>
        <p>Already have an account? <a href="login.php">Login</a></p>
      </div>
    </div>
  </div>
</body>
</html>

Het is gewoon een eenvoudig HTML/CSS-bestand. Het enige dat het vermelden waard is, is dat we het Bootstrap 4 CSS-framework gebruiken om onze pagina op te maken. Je kunt elk ander stijlframework naar keuze gebruiken of je eigen CSS schrijven als je wilt.

Onmiddellijk na de Bootstrap CSS voegen we een main.css-bestand toe voor aangepaste styling. Laten we dat bestand nu maken. Maak in de hoofdmap van de toepassing een bestand met de naam main.css.

main.css:

@import url('https://fonts.googleapis.com/css?family=Lora');
li { list-style-type: none; }
.form-wrapper {
  margin: 50px auto 50px;
  font-family: 'Lora', serif;
  font-size: 1.09em;
}
.form-wrapper.login { margin-top: 120px; }
.form-wrapper p { font-size: .8em; text-align: center; }
.form-control:focus { box-shadow: none; }
.form-wrapper {
  border: 1px solid #80CED7;
  border-radius: 5px;
  padding: 25px 15px 0px 15px;
}
.form-wrapper.auth .form-title { color: #007EA7; }
.home-wrapper button,
.form-wrapper.auth button {
  background: #007EA7;
  color: white;
}
.home-wrapper {
  margin-top: 150px;
  border-radius: 5px;
  padding: 10px;
  border: 1px solid #80CED7;
}

Op de eerste regel van dit bestand importeren en gebruiken we enkele Google-lettertypen om onze lettertypen er mooier uit te laten zien.

Ga nu naar het login.php-bestand en doe iets soortgelijks.

login.php:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css" />
  <link rel="stylesheet" href="main.css">
  <title>User verification system PHP - Login</title>
</head>
<body>
  <div class="container">
    <div class="row">
      <div class="col-md-4 offset-md-4 form-wrapper auth login">
        <h3 class="text-center form-title">Login</h3>
        <form action="login.php" method="post">
          <div class="form-group">
            <label>Username or Email</label>
            <input type="text" name="username" class="form-control form-control-lg" value="<?php echo $username; ?>">
          </div>
          <div class="form-group">
            <label>Password</label>
            <input type="password" name="password" class="form-control form-control-lg">
          </div>
          <div class="form-group">
            <button type="submit" name="login-btn" class="btn btn-lg btn-block">Login</button>
          </div>
        </form>
        <p>Don't yet have an account? <a href="signup.php">Sign up</a></p>
      </div>
    </div>
  </div>
</body>
</html>

Ga in uw browser naar http://localhost/cwa/verify-user/signup.php u ziet een mooi aanmeldingsformulier (hetzelfde voor inloggen). Negeer de fouten in de invoervelden, we zullen dat snel oplossen.

Laten we voor nu de database instellen. Maak een database met de naam verifiëren-gebruiker en maak in deze database als volgt een gebruikerstabel met kenmerken:

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(100) NOT NULL,
 `email` varchar(100) NOT NULL,
 `verified` tinyint(1) NOT NULL DEFAULT '0',
 `token` varchar(255) DEFAULT NULL,
 `password` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
)

Niets ongewoons, behalve misschien het token en de geverifieerde velden, die ik zo dadelijk zal uitleggen.

Nu beginnen we met de daadwerkelijke aanmeldingslogica. Ik verwijs meestal graag naar het logische deel van mijn toepassing als de controllers en dat is wat ik hier zal doen. Maak in de hoofdmap van het project een map met de naam controllers en binnen controllers een bestand met de naam authController.php.

controllers/authController.php:

<?php
session_start();
$username = "";
$email = "";
$errors = [];

$conn = new mysqli('localhost', 'root', '', 'verify-user');

// SIGN UP USER
if (isset($_POST['signup-btn'])) {
    if (empty($_POST['username'])) {
        $errors['username'] = 'Username required';
    }
    if (empty($_POST['email'])) {
        $errors['email'] = 'Email required';
    }
    if (empty($_POST['password'])) {
        $errors['password'] = 'Password required';
    }
    if (isset($_POST['password']) && $_POST['password'] !== $_POST['passwordConf']) {
        $errors['passwordConf'] = 'The two passwords do not match';
    }

    $username = $_POST['username'];
    $email = $_POST['email'];
    $token = bin2hex(random_bytes(50)); // generate unique token
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT); //encrypt password

    // Check if email already exists
    $sql = "SELECT * FROM users WHERE email='$email' LIMIT 1";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        $errors['email'] = "Email already exists";
    }

    if (count($errors) === 0) {
        $query = "INSERT INTO users SET username=?, email=?, token=?, password=?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('ssss', $username, $email, $token, $password);
        $result = $stmt->execute();

        if ($result) {
            $user_id = $stmt->insert_id;
            $stmt->close();

            // TO DO: send verification email to user
            // sendVerificationEmail($email, $token);

            $_SESSION['id'] = $user_id;
            $_SESSION['username'] = $username;
            $_SESSION['email'] = $email;
            $_SESSION['verified'] = false;
            $_SESSION['message'] = 'You are logged in!';
            $_SESSION['type'] = 'alert-success';
            header('location: index.php');
        } else {
            $_SESSION['error_msg'] = "Database error: Could not register user";
        }
    }
}

// LOGIN
if (isset($_POST['login-btn'])) {
    if (empty($_POST['username'])) {
        $errors['username'] = 'Username or email required';
    }
    if (empty($_POST['password'])) {
        $errors['password'] = 'Password required';
    }
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (count($errors) === 0) {
        $query = "SELECT * FROM users WHERE username=? OR email=? LIMIT 1";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('ss', $username, $password);

        if ($stmt->execute()) {
            $result = $stmt->get_result();
            $user = $result->fetch_assoc();
            if (password_verify($password, $user['password'])) { // if password matches
                $stmt->close();

                $_SESSION['id'] = $user['id'];
                $_SESSION['username'] = $user['username'];
                $_SESSION['email'] = $user['email'];
                $_SESSION['verified'] = $user['verified'];
                $_SESSION['message'] = 'You are logged in!';
                $_SESSION['type'] = 'alert-success';
                header('location: index.php');
                exit(0);
            } else { // if password does not match
                $errors['login_fail'] = "Wrong username / password";
            }
        } else {
            $_SESSION['message'] = "Database error. Login failed!";
            $_SESSION['type'] = "alert-danger";
        }
    }
}

Als je mijn vorige tutorials hebt gevolgd, zou niets in dit bestand nieuw voor je moeten zijn. Maar voor de beginners ga ik wat uitleggen.

Het eerste is dat we de sessie starten met session_start() omdat we ingelogde gebruikersinformatie in de sessie moeten opslaan. Na het starten van de sessie, initialiseren we de $username en $email variabelen die we gebruiken in onze formulieren, en ook de $errors array die onze formuliervalidatiefouten zal bevatten.

Vervolgens maken we verbinding met de database. De volgende twee if-instructies die volgen, zijn respectievelijk de code die wordt uitgevoerd wanneer de gebruiker op de aanmeldings- of inlogknoppen klikt. In het geval van aanmelding controleren we of alle verplichte velden correct zijn ingevuld en pas daarna gaan we over tot het opslaan van de gebruiker in de database. We genereren ook een token (een unieke, willekeurige tekenreeks) en slaan deze op met gebruiker als kenmerk. Dit wordt gebruikt om het e-mailadres van de gebruiker te verifiëren. Later meer hierover.

Aangezien ons bestand authController.php verantwoordelijk is voor aanmelding en aanmelding, moeten we het helemaal bovenaan de pagina's signup.php en login.php opnemen, omdat daar de formuliergegevens worden verzonden. Vind ik leuk:

signup.php en login.php (helemaal bovenaan):

<?php include 'controllers/authController.php' ?>

Als er foutmeldingen zijn in de $errors-array, moeten we deze op het formulier weergeven. Om dat te doen, voegt u deze if-verklaring toe in uw formulier direct onder de formuliertitel voor zowel aanmeldings- als inlogpagina's.

<!-- form title -->
<h3 class="text-center form-title">Register</h3> <!-- or Login -->

<?php if (count($errors) > 0): ?>
  <div class="alert alert-danger">
    <?php foreach ($errors as $error): ?>
    <li>
      <?php echo $error; ?>
    </li>
    <?php endforeach;?>
  </div>
<?php endif;?>

Als er geen fouten zijn, gaat ons script verder met het opslaan van de gebruiker in de database. Na het opslaan van de gebruiker in de database loggen we direct in. In ons geval betekent het inloggen van een gebruiker dat zijn gegevens in de sessie worden opgeslagen en dat is wat we zojuist hebben gedaan.

Op dit punt kunt u zich al registreren en zelfs een gebruiker aanmelden. Maar nadat u bent ingelogd, wordt u doorgestuurd naar de index.php-pagina die niet bestaat. We zullen het snel maken.

In authController.php slaan we bericht- en typevariabelen op in de sessie die moet worden weergegeven zodra de gebruiker is ingelogd. bericht is de eigenlijke tekst van het bericht, terwijl het type de Bootstrap-stijlklasse is die het bericht opmaakt met de juiste kleuren afhankelijk van de typewaarde.

Dit bericht wordt weergegeven nadat de gebruiker is ingelogd en wordt weergegeven in het index.php-bestand. Laten we dat bestand nu in de hoofdmap van ons project maken.

index.php:

<?php include 'controllers/authController.php'?>
<?php
// redirect user to login page if they're not logged in
if (empty($_SESSION['id'])) {
    header('location: login.php');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css" />
  <link rel="stylesheet" href="main.css">
  <title>User verification system PHP</title>
</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-md-4 offset-md-4 home-wrapper">

        <!-- Display messages -->
        <?php if (isset($_SESSION['message'])): ?>
        <div class="alert <?php echo $_SESSION['type'] ?>">
          <?php
            echo $_SESSION['message'];
            unset($_SESSION['message']);
            unset($_SESSION['type']);
          ?>
        </div>
        <?php endif;?>

        <h4>Welcome, <?php echo $_SESSION['username']; ?></h4>
        <a href="logout.php" style="color: red">Logout</a>
        <?php if (!$_SESSION['verified']): ?>
          <div class="alert alert-warning alert-dismissible fade show" role="alert">
            You need to verify your email address!
            Sign into your email account and click
            on the verification link we just emailed you
            at
            <strong><?php echo $_SESSION['email']; ?></strong>
          </div>
        <?php else: ?>
          <button class="btn btn-lg btn-primary btn-block">I'm verified!!!</button>
        <?php endif;?>
      </div>
    </div>
  </div>
</body>
</html>

Deze pagina is bedoeld om alleen toegankelijk te zijn voor ingelogde gebruikers. Dat is de reden waarom we de gebruiker in het bovenste gedeelte van het bestand omleiden naar de inlogpagina als ze niet zijn ingelogd. Ergens in het midden van de pagina geven we het bericht weer. Nadat het bericht is weergegeven, schakelen we het bericht uit en typen we variabelen omdat we niet willen dat het op de pagina blijft staan, zelfs niet nadat de gebruiker de pagina heeft vernieuwd.

Ten slotte voeren we in het midden van de pagina een controle uit om te zien of de ingelogde gebruiker zijn e-mailadres heeft geverifieerd of niet. Onthoud dat we de geverifieerde variabele aan de sessie hebben toegevoegd toen we de gebruiker inlogden. Als de gebruiker is geverifieerd, wordt de tekst 'Ik ben geverifieerd!!!' weergegeven. knop zodat ze het kunnen zien. Als ze niet zijn geverifieerd, vertellen we ze over de verificatielink die we naar hun e-mailadres hebben gestuurd en vragen we ze op die link te klikken om hun e-mailadres te verifiëren.

E-mail verifiëren

In het bestand authController.php gebruikten we een opmerking om aan te geven waar we de verificatie-e-mail naar de gebruiker zouden sturen door de sendVerificationEmail() aan te roepen. Ga naar het bestand authController.php en verwijder het commentaar bij de functie-aanroep als volgt:

// TO DO: send verification email to user
sendVerificationEmail($email, $token);

We zullen deze functie in een ander bestand definiëren en dat bestand opnemen in authController.php. Maak in de map controllers een bestand met de naam sendEmails.php.

Voordat we code aan dit bestand toevoegen, wil ik iets zeggen over PHP SwiftMailer, de populaire bibliotheek voor het verzenden van e-mails in PHP die we in dit project gaan gebruiken om e-mails van localhost te verzenden.

SwiftMailer is een populaire bibliotheek met veel functies voor het verzenden van e-mails in PHP-applicaties.

Om Swiftmailer te gebruiken, moet u eerst Composer installeren. Nadat u Composer hebt geïnstalleerd, opent u uw terminal of opdrachtregel en navigeert u naar de hoofdmap van het project en voert u de volgende opdracht uit om de Swift Mailer-bibliotheek met al zijn bestanden aan ons project toe te voegen:

composer require "swiftmailer/swiftmailer:^6.0"

Dit creëert een leveranciersmap in de hoofdmap van onze applicatie die alle code (klassen) bevat die nodig is voor het verzenden van een e-mail en het creëert ook een componist.json-bestand in de hoofdmap van de toepassing dat er als volgt uitziet:

{
    "require": {
        "swiftmailer/swiftmailer": "^6.0"
    }
}

Open nu het bestand sendEmails.php dat we eerder hebben gemaakt en laten we de functie sendVerificationEmail():

schrijven
<?php
require_once './vendor/autoload.php';

// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
    ->setUsername(SENDER_EMAIL)
    ->setPassword(SENDER_PASSWORD);

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

function sendVerificationEmail($userEmail, $token)
{
    global $mailer;
    $body = '<!DOCTYPE html>
    <html lang="en">

    <head>
      <meta charset="UTF-8">
      <title>Test mail</title>
      <style>
        .wrapper {
          padding: 20px;
          color: #444;
          font-size: 1.3em;
        }
        a {
          background: #592f80;
          text-decoration: none;
          padding: 8px 15px;
          border-radius: 5px;
          color: #fff;
        }
      </style>
    </head>

    <body>
      <div class="wrapper">
        <p>Thank you for signing up on our site. Please click on the link below to verify your account:.</p>
        <a href="http://localhost/cwa/verify-user/verify_email.php?token=' . $token . '">Verify Email!</a>
      </div>
    </body>

    </html>';

    // Create a message
    $message = (new Swift_Message('Verify your email'))
        ->setFrom(SENDER_EMAIL)
        ->setTo($userEmail)
        ->setBody($body, 'text/html');

    // Send the message
    $result = $mailer->send($message);

    if ($result > 0) {
        return true;
    } else {
        return false;
    }
}

De eerste instructie vereist dat het autoload.php-bestand in dit bestand wordt opgenomen. Dit autoload.php-bestand bevat automatisch alle klassen uit de Swift Mailer-bibliotheek in de leveranciersmap die we in dit bestand gebruiken.

In dit voorbeeld gebruiken we Gmail. U kunt de SENDER_EMAIL en SENDER_PASSWORD dus vervangen door uw Gmail-adres en wachtwoord dat u wilt gebruiken als het e-mailadres van de afzender. (Het e-mailadres van de ontvanger is het e-mailadres dat via het formulier is ingevuld).

Normaal gesproken moet u, om iemand een e-mail te sturen, inloggen op uw Gmail-account voordat u de e-mail opstelt en verzendt. Het is hetzelfde als wat de Swift Mailer-bibliotheek doet. Dus wanneer de ontvanger ($userEmail) de e-mail ontvangt, is het uw Gmail-adres (SENDER_EMAIL) dat ze zullen zien als de verzendende e-mail.

Nu noemen we de functie sendVerificationEmail() in ons bestand authController.php, maar we hebben de functie in het bestand sendEmails.php gedefinieerd. Laten we het bestand sendEmails.php in onze authController.php opnemen om deze functie in het bestand beschikbaar te maken. Voeg bovenaan authController.php, net voor session_start(), de volgende regel toe:

require_once 'sendEmails.php';

Dat is alles wat we nodig hebben, heren (en dames) om een ​​e-mail naar onze gebruiker te sturen met een e-mailverificatielink. Maar we werken aan localhost en Gmail blokkeert alle inlogpogingen van Swift Mailer die op localhost worden uitgevoerd.

E-mail verzenden vanaf localhost

Als u wilt dat dit op localhost wordt uitgevoerd, moet u uw Gmail-account configureren om inloggen via minder veilige apps te accepteren. Dit kan natuurlijk een kwetsbaarheid vormen voor uw Gmail-account, maar u kunt dit alleen doen voor de korte tijd die u nodig heeft om deze applicatie op localhost te testen. Na het testen kunt u de instelling op uw Gmail-account ongedaan maken. Zodra uw applicatie op internet is gehost, gaat u aan de slag. We doen dit alleen omdat we op localhost zijn.

Je kunt nog voorzichtiger zijn en alleen voor deze doeleinden een ander Gmail-account maken.

Log dus in op uw Gmail in uw browser, ga naar https://myaccount.google.com/security#connectedapps en wijzig de waarde 'Sta minder veilige apps toe' in AAN.

Je kunt dit uitschakelen zodra je klaar bent met het testen van het project op localhost.

Hiermee kun je een e-mail sturen van localhost met een verificatielink zodra de gebruiker zich aanmeldt. Kijk nu opnieuw naar de methode sendVerificationEmail() en u zult zien dat in de hoofdtekst van de e-mail die we naar de gebruiker sturen, het token dat we voor die specifieke gebruiker hebben gegenereerd (het token is uniek) is ingesteld als een parameter op de link zodat wanneer de gebruiker op de link in de e-mail klikt, ze naar onze applicatie worden geleid op een pagina met de naam verify_email.php met die token op de URL. Zoals dit:

<a href="http://localhost/cwa/verify-user/verify_email.php?token=0a150966418fa3a694bcb3ab8fcacd2063a096accc0ee33c3e8c863538ee825c0b52f2e1535d0e1377558c378ba5fc3106eb">Verify Email!</a>

Dus we kunnen dit token op deze manier in onze verifieer_email.php krijgen (rustig, we zullen dit binnenkort verifiëren_email.php): 

$token = $_GET['token'];

We kunnen dit token nu gebruiken om de gebruiker op te halen die dit specifieke token heeft (onthoud dat het token uniek is) en als we die gebruiker krijgen, werken we hun record bij door het geverifieerde kenmerk in de database te wijzigen in true. Dan kunnen we met trots zeggen dat we het e-mailadres van die gebruiker hebben geverifieerd.

Laten we dit verifieer_email.php-bestand maken in de hoofdmap van ons project:

verifiëren_email.php:

<?php
session_start();

$conn = new mysqli('localhost', 'root', '', 'verify-user');

if (isset($_GET['token'])) {
    $token = $_GET['token'];
    $sql = "SELECT * FROM users WHERE token='$token' LIMIT 1";
    $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
        $user = mysqli_fetch_assoc($result);
        $query = "UPDATE users SET verified=1 WHERE token='$token'";

        if (mysqli_query($conn, $query)) {
            $_SESSION['id'] = $user['id'];
            $_SESSION['username'] = $user['username'];
            $_SESSION['email'] = $user['email'];
            $_SESSION['verified'] = true;
            $_SESSION['message'] = "Your email address has been verified successfully";
            $_SESSION['type'] = 'alert-success';
            header('location: index.php');
            exit(0);
        }
    } else {
        echo "User not found!";
    }
} else {
    echo "No token provided!";
}

Merk op dat het instellen van de waarde van de geverifieerde waarde op 1 hetzelfde is als het instellen op true, aangezien Boolean in het MySQL-databasetype wordt geïnterpreteerd als tinyint.

Wanneer de gebruiker nu op de link in zijn e-mail klikt en deze naar deze pagina leidt, wordt de geverifieerde status van die gebruiker bijgewerkt naar waar, wordt hij ingelogd en wordt hij doorverwezen naar de index.php-pagina. Op de indexpagina, na het verifiëren van de gebruiker, zult u merken dat het waarschuwingsbericht dat de gebruiker adviseert om hun e-mailadres te verifiëren, nu verdwenen is en in plaats daarvan hebben we de "Ik ben geverifieerd!!!" knop die alleen zichtbaar is voor geverifieerde gebruikers.

Nog een laatste ding, op de index.php-pagina nadat de gebruiker is ingelogd, is er een uitloglink die verwijst naar een logout.php-bestand dat de gebruiker zou moeten uitloggen. Laten we dat bestand in de hoofdmap van onze applicatie maken:

uitloggen.php:

<?php
session_destroy();
unset($_SESSION['id']);
unset($_SESSION['username']);
unset($_SESSION['email']);
unset($_SESSION['verify']);
header("location: login.php");

Dus naast de mogelijkheid om zich aan te melden, e-mail te verifiëren, in te loggen, kan de gebruiker nu ook uitloggen.

Conclusie

Dus dat is het zo'n beetje met gebruikersregistratie en e-mailverificatie. Als je opmerkingen, vragen of bemoedigende woorden hebt, laat ze dan achter in de reactie hieronder. En vergeet niet om dit bericht te delen of deze site aan je vrienden aan te bevelen als je het nuttig vond. Het moedigt me enorm aan!

Fijne dag!


  1. SQL Transponeer rijen als kolommen

  2. Hoe WEIGHT_STRING() werkt in MariaDB

  3. SQL GROUP BY CASE-instructie met aggregatiefunctie

  4. Postgres is de coolste database – Reden #2:The License