Verifikasi Pendaftaran Dengan PHPMailer dan PHP JWT

20 Desember 2024
Bagikan:
Verifikasi Pendaftaran Dengan PHPMailer dan PHP JWT

Memverifikasi pendaftaran yang dilakukan oleh user ke sistem website atau aplikasi merupakan hal yang lumrah dilakukan dalam upaya untuk mencegah terjadinya registrasi akun yang tidak valid atau spam. Dalam perkembangan teknologi saat ini ada berbagai macam metode verifikasi pada saat melakukan registrasi secara online seperti menggunakan sms, whatsapp, telegram dan jenis lainnya. Tetapi meskipun ada berbagai macam metode, mengirim email verifikasi merupakan cara yang sampai saat ini masih banyak digunakan selain karena memang mudah juga kita tidak perlu membayar biaya tambahan karena kita bisa memanfaatkan layanan email yang terdapat pada layanan hosting yang kita miliki.

Baca juga : Helper PHPMailer Untuk Kirim Email Dengan Tampilan Menarik

Disini saya akan menggunakan mail trap sebagai alat untuk uji coba mengirim pemberitahuan konfirmasi pendaftaran yang nantinya berisi link token yang dibuat oleh PHP JWT (JSON Web Token). Jadi ini hanya simulasi artinya saya hanya akan memberikan gambaran singkatnya saja. Dan berikut ini adalah Verifikasi Pendaftaran Dengan PHPMailer dan PHP JWT :

Instal PHPMailer dan Firebase php jwt

Instal library yang dibutuhkan menggunakan composer

composer phpmailer/mailer
composer firebase/php-jwt

Buat Halaman Untuk Mengirim Pemberitahuan 

Selanjutnya buat halaman register.php. Karena disini saya menggunakan mail trap, maka nilai – nilai konfigurasi yang saya gunakan tentunya menggunakan sandbox dari akun mail trap

<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$key = 'my_secret_key';
$payload = array(
   "user" => "useremail@gmail.com",
   "iat" => time(),
   "exp" => time() + 100
);
$token = JWT::encode($payload, $key, 'HS256');
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
   //Server settings
   $mail->isSMTP();                                            //Send using SMTP
   $mail->Host = 'sandbox.smtp.mailtrap.io';                     //Set the SMTP server to send through
   $mail->SMTPAuth = true;                                       //Enable SMTP authentication
   $mail->Username = '87bea83xxxxx';                           //SMTP username
   $mail->Password = '7801f50xxxxxxx';                           //SMTP password
   $mail->Port = 2525;                                           //Port to connect to
   //Recipients
   $mail->setFrom('from@example.com', 'Mailer');
   $mail->addAddress('joe@example.net', 'Joe User');
   $mail->addAddress('ellen@example.com');
   $mail->addReplyTo('info@example.com', 'Information');
   $mail->addCC('cc@example.com');
   $mail->addBCC('bcc@example.com');
   //Content
   $mail->isHTML(true);                                          //Set email format to HTML
   $mail->Subject = 'Here is the subject';
   $mail->Body = 'Konfirmasi pendaftaran <a href="https://coder.test/token.php?tok=' . $token . '">Konfirmasi</a>';
   $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
   $mail->send();
   echo 'Message has been sent';
} catch (Exception $e) {
   echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Verifikasi Token 

Selanjutnya buat halaman token.php untuk memverifikasi token yang dikirim ke email

<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$token = $_GET['tok'];
$key = 'my_secret_key';
try{
    $decoded = JWT::decode($token, new Key($key, 'HS256'));
    echo $decoded->user;
}catch(Exception $e)
{
    echo $e->getMessage();
}

Sekenario diatas sebenarnya bisa dijelaskan secara sederhana. Ketika user daftar maka kita tambahkan user tersebut kedalam daftar user namun harus dibedakan, misal jika user yang belum konfirmasi email maka kita tandai misal dengan statusnya aktif atau tidak.

Kemudian jika user mengkonfirmasi pendaftaran dengan mengklik link pendaftaran yang berisi token, maka nanti JWT akan memeriksa apakah token masih valid atau tidak, jika valid kita tinggal akses data email yang berada didalam payload lalu gunakan sebagai parameter untuk mengupdate data.

Verifikasi Pendaftaran Dengan PHPMailer dan PHP JWT | Blog Pursem.com | Pursem