Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Rejestracja użytkownika i weryfikacja poczty e-mail PHP i MySQL

Napisałem już post na blogu na temat tworzenia kompletnego systemu rejestracji i logowania użytkownika przy użyciu PHP i MySQL, ale nie uwzględniłem weryfikacji adresu e-mail.

Ten samouczek jest trochę jak aktualizacja poprzedniego samouczka. Oprócz możliwości zarejestrowania się, zalogowania i wylogowania się ze swojego konta, użytkownik otrzyma również e-mail weryfikacyjny na swój adres e-mail z linkiem, w którym może kliknąć i zweryfikować swój adres e-mail.

W większości aplikacji, które zamierzasz zbudować, ważne jest, aby dodać funkcję weryfikacji adresu e-mail z wielu powodów:możesz chcieć wysłać wiadomość e-mail później do użytkownika i upewnić się, że ją zobaczy; lub użytkownik może zapomnieć swoje hasło i musi je zresetować, a w tym celu będziemy musieli wysłać mu e-mail z linkiem do resetowania hasła; jest wiele innych powodów, ale rozumiesz.

W tym systemie, który dzisiaj budujemy, użytkownicy, którzy nie zweryfikowali swojego adresu e-mail, nie będą mogli wykonywać pewnych czynności (skorzystam tylko z prostej demonstracji, takiej jak wyświetlenie przycisku. Tylko zweryfikowani użytkownicy będą mogli ten przycisk zobaczyć).

Aby rozpocząć, utwórz nowy projekt PHP o nazwie Verify-user iw tym folderze utwórz dwa pliki:signup.php i login.php.

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

To tylko prosty plik HTML/CSS. Jedyną rzeczą wartą odnotowania jest to, że używamy frameworka Bootstrap 4 CSS do stylizacji naszej strony. Możesz użyć dowolnego innego wybranego schematu stylizacji lub napisać własny CSS, jeśli chcesz.

Zaraz po Bootstrap CSS dołączamy plik main.css do niestandardowej stylizacji. Stwórzmy teraz ten plik. W folderze głównym aplikacji utwórz plik o nazwie 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;
}

W pierwszym wierszu tego pliku importujemy i używamy niektórych czcionek Google, aby nasze czcionki wyglądały piękniej.

Teraz przejdź do pliku login.php i zrób podobną rzecz.

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>

W przeglądarce przejdź do http://localhost/cwa/verify-user/signup.php, zobaczysz piękny formularz rejestracji (taki sam jak przy logowaniu). Zignoruj ​​błędy w polach wejściowych, wkrótce to naprawimy.

Na razie skonfigurujmy bazę danych. Utwórz bazę danych o nazwie Verify-user i w tej bazie danych utwórz tabelę użytkowników z atrybutami w następujący sposób:

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

Nic niezwykłego poza, być może, tokenem i zweryfikowanymi polami, które za chwilę wyjaśnię.

Teraz zaczynamy od właściwej logiki rejestracji. Zwykle lubię odnosić się do logicznej części mojej aplikacji jako do kontrolerów i to właśnie zrobię tutaj. W folderze głównym projektu utwórz folder o nazwie controllers, a wewnątrz kontrolerów utwórz plik o nazwie 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";
        }
    }
}

Jeśli śledziłeś moje poprzednie samouczki, nic w tym pliku nie powinno być dla ciebie nowe. Ale ze względu na nowicjuszy zamierzam trochę wyjaśnić.

Pierwszą rzeczą jest to, że rozpoczynamy sesję za pomocą session_start(), ponieważ będziemy musieli przechowywać informacje o zalogowanym użytkowniku w sesji. Po rozpoczęciu sesji inicjujemy zmienne $username i $email, których używamy w naszych formularzach, a także tablicę $errors, która będzie przechowywać błędy walidacji naszych formularzy.

Następnie łączymy się z bazą danych. Następne dwie instrukcje if są odpowiednio kodem, który jest wykonywany, gdy użytkownik kliknie przycisk rejestracji lub logowania. W przypadku rejestracji sprawdzamy, czy wszystkie wymagane pola zostały poprawnie wypełnione i dopiero wtedy przystępujemy do zapisania użytkownika w bazie danych. Generujemy też token (unikalny, losowy ciąg) i zapisujemy go z użytkownikiem jako atrybutem. Będzie to używane do weryfikacji adresu e-mail użytkownika. Więcej o tym później.

Ponieważ nasz plik authController.php jest odpowiedzialny za rejestrację i logowanie, musimy umieścić go na samej górze stron signup.php i login.php, ponieważ tam przesyłane są dane formularza. Tak:

signup.php i login.php (na samej górze):

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

Jeśli w tablicy $errors są jakieś komunikaty o błędach, musimy je wyświetlić w formularzu. Aby to zrobić, dodaj to oświadczenie if w formularzu bezpośrednio pod tytułem formularza zarówno na stronie rejestracji, jak i logowania.

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

Jeśli nie ma błędów, nasz skrypt przystąpi do zapisywania użytkownika w bazie danych. Po zapisaniu użytkownika w bazie danych od razu go logujemy. W naszym przypadku zalogowanie użytkownika oznacza przechowywanie jego danych w sesji i właśnie to zrobiliśmy.

W tym momencie możesz już zarejestrować, a nawet zalogować użytkownika. Ale po zalogowaniu zostaniesz przekierowany na stronę index.php, która nie istnieje. Wkrótce to stworzymy.

W authController.php przechowujemy zmienne wiadomości i typów w sesji, które mają być wyświetlane, gdy tylko użytkownik się zaloguje. komunikat to rzeczywisty tekst wiadomości, a typ to klasa stylizacji Bootstrap, która sformatuje wiadomość z odpowiednim kolory w zależności od wartości typu.

Ten komunikat jest wyświetlany po zalogowaniu się użytkownika i jest wyświetlany w pliku index.php. Utwórzmy teraz ten plik w folderze głównym naszego projektu.

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>

Ta strona ma być dostępna tylko dla zalogowanych użytkowników. Dlatego w górnej części pliku przekierowujemy użytkownika do strony logowania, jeśli nie jest zalogowany. Gdzieś na środku strony wyświetlamy komunikat. Po wyświetleniu komunikatu odznaczamy komunikat i wpisujemy zmienne, ponieważ nie chcemy, aby pozostał na stronie nawet po odświeżeniu strony przez użytkownika.

Na koniec na środku strony sprawdzamy, czy zalogowany użytkownik zweryfikował swój adres e-mail, czy nie. Pamiętaj, że zweryfikowaną zmienną dodaliśmy w sesji po zalogowaniu użytkownika. Jeśli użytkownik został zweryfikowany, wyświetlamy komunikat „Jestem zweryfikowany!!!” przycisk, aby mogli je zobaczyć. Jeśli nie zostaną zweryfikowani, informujemy ich o linku weryfikacyjnym, który wysłaliśmy na ich adres e-mail, i prosimy o kliknięcie tego linku w celu zweryfikowania adresu e-mail.

Zweryfikuj e-mail

W pliku authController.php użyliśmy komentarza, aby wskazać, gdzie wyślemy e-mail weryfikacyjny do użytkownika, wywołując metodę sendVerificationEmail(). Przejdź do pliku authController.php i odkomentuj wywołanie funkcji w ten sposób:

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

Zdefiniujemy tę funkcję w innym pliku i dołączymy ten plik do authController.php. Wewnątrz folderu controllers utwórz plik o nazwie sendEmails.php.

Zanim dodamy jakikolwiek kod w tym pliku, powiem trochę o PHP SwiftMailer, popularnej bibliotece do wysyłania e-maili w PHP, której będziemy używać w tym projekcie do wysyłania e-maili z localhost.

SwiftMailer to popularna, bogata w funkcje biblioteka do wysyłania wiadomości e-mail w aplikacjach PHP.

Aby korzystać ze Swiftmailera, musisz najpierw zainstalować Composer. Po zainstalowaniu kompozytora otwórz terminal lub wiersz poleceń i przejdź do folderu głównego projektu i uruchom następujące polecenie, aby dodać bibliotekę Swift Mailer ze wszystkimi jej plikami do naszego projektu:

composer require "swiftmailer/swiftmailer:^6.0"

Spowoduje to utworzenie folderu dostawcy w katalogu głównym naszej aplikacji zawierającego cały kod (klasy) wymagane do wysłania wiadomości e-mail, a także plik composer.json w katalogu głównym aplikacji, który wygląda tak:

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

Teraz otwórz utworzony wcześniej plik sendEmails.php i napiszmy funkcję sendVerificationEmail():

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

Pierwsza instrukcja wymaga umieszczenia w tym pliku pliku autoload.php. Ten plik autoload.php automatycznie uwzględni wszystkie klasy z biblioteki Swift Mailer w folderze dostawcy, którego używamy w tym pliku.

W tym przykładzie używamy Gmaila. Możesz więc zastąpić SENDER_EMAIL i SENDER_PASSWORD swoim adresem Gmail i hasłem, których chcesz używać jako adresu e-mail nadawcy. (Adres e-mail odbiorcy to ten, który został przesłany za pośrednictwem formularza).

Zwykle, aby wysłać do kogoś wiadomość e-mail, musisz zalogować się na swoje konto Gmail przed zredagowaniem i wysłaniem wiadomości. Jest to ten sam rodzaj, co biblioteka Swift Mailer. Tak więc, gdy odbiorca ($userEmail) otrzyma wiadomość e-mail, to Twój adres Gmail (SENDER_EMAIL) będzie widziany jako wysyłający e-mail.

Teraz wywołujemy funkcję sendVerificationEmail() w naszym pliku authController.php, ale zdefiniowaliśmy funkcję w pliku sendEmails.php. Dodajmy plik sendEmails.php do naszego authController.php, aby ta funkcja była dostępna w pliku. Na górze authController.php, tuż przed session_start(), dodaj następującą linię:

require_once 'sendEmails.php';

To wszystko, czego potrzebujemy, panowie (i panie), aby wysłać e-mail do naszego użytkownika z linkiem weryfikacyjnym e-mail. Ale pracujemy na hoście lokalnym, a Gmail zablokuje wszelkie próby logowania z Swift Mailer działającego na hoście lokalnym.

Wysyłanie wiadomości e-mail z hosta lokalnego

Jeśli chcesz, aby to działało na hoście lokalnym, musisz skonfigurować swoje konto Gmail, aby akceptować logowanie z mniej bezpiecznych aplikacji. Oczywiście może to stanowić pewną podatność na twoje konto Gmail, ale możesz to zrobić tylko przez krótki czas, w którym musisz przetestować tę aplikację na lokalnym hoście. Po przetestowaniu możesz cofnąć ustawienie na swoim koncie Gmail. Gdy Twoja aplikacja zostanie umieszczona w Internecie, będziesz pracować. Robimy to tylko dlatego, że jesteśmy na lokalnym hoście.

Możesz być jeszcze bardziej ostrożny i utworzyć kolejne konto Gmail tylko do takich celów.

Zaloguj się więc do Gmaila w przeglądarce, wejdź na https://myaccount.google.com/security#connectedapps i zmień wartość „Zezwalaj na mniej bezpieczne aplikacje” na WŁ.

Możesz to wyłączyć po zakończeniu testowania projektu na hoście lokalnym.

Dzięki temu będziesz mógł wysłać wiadomość e-mail z localhost z linkiem weryfikacyjnym po zarejestrowaniu się użytkownika. Teraz spójrz ponownie na metodę sendVerificationEmail(), a zauważysz, że w treści wiadomości e-mail, którą wysyłamy do użytkownika, token, który wygenerowaliśmy dla tego konkretnego użytkownika (token jest unikalny) został ustawiony jako parametr w linku tak, że gdy użytkownik kliknie link w e-mailu, zostanie przekierowany do naszej aplikacji na stronie o nazwie verify_email.php z tym tokenem w adresie URL. Tak:

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

Możemy więc uzyskać ten token w naszym Verify_email.php w ten sposób (spokojnie, wkrótce utworzymy ten Verify_email.php):

$token = $_GET['token'];

Możemy teraz użyć tego tokena, aby pobrać użytkownika, który ma ten konkretny token (pamiętaj, że token jest unikalny) i jeśli otrzymamy tego użytkownika, zaktualizujemy jego rekord, zmieniając zweryfikowany atrybut na true w bazie danych. Następnie możemy z dumą powiedzieć, że zweryfikowaliśmy adres e-mail tego użytkownika.

Stwórzmy ten plik Verify_email.php w głównym folderze naszego projektu:

weryfikacja_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!";
}

Pamiętaj, że ustawienie wartości zweryfikowanej na 1 jest tym samym, co ustawienie true, ponieważ w bazie danych MySQL typ Boolean jest interpretowany jako tinyint.

Teraz, gdy użytkownik kliknie link w swoim e-mailu i przeniesie go na tę stronę, zaktualizuje zweryfikowany status tego użytkownika na true, zaloguje go i przekieruje na stronę index.php. Na stronie indeksu, po zweryfikowaniu użytkownika, zauważysz, że komunikat ostrzegający użytkownika o konieczności weryfikacji adresu e-mail zniknął, a w jego miejsce mamy napis „Zweryfikowano!!!” przycisk widoczny tylko dla zweryfikowanych użytkowników.

Ostatnia rzecz, na stronie index.php po zalogowaniu użytkownika znajduje się link do wylogowania, który wskazuje na plik logout.php, który ma wylogować użytkownika. Stwórzmy ten plik w katalogu głównym naszej aplikacji:

logout.php:

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

Tak więc oprócz możliwości rejestracji, weryfikacji poczty e-mail, zalogowania się, użytkownik może teraz również się wylogować.

Wniosek

O to chodzi z rejestracją użytkownika i weryfikacją e-mailową. Jeśli masz jakieś uwagi, pytania lub słowa zachęty, zostaw je w komentarzu poniżej. I proszę, pamiętaj, aby udostępnić ten post lub polecić tę stronę znajomym, jeśli uznasz ją za pomocną. Bardzo mnie to zachęca!

Miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importuj dane do bazy danych MySQL

  2. Korzystanie z tunelowania SSH jako alternatywy VPN

  3. Jak przechowywać uuid jako numer?

  4. Klasy zagnieżdżone — CustomRowMapper !! To już nie problem!! - Część 1

  5. Połączenie z Db umiera po>4<24 w hibernacji wiosennego rozruchu jpa