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/mailercomposer firebase/php-jwtBuat 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.