Tutorial PHP : Mengirim Link Aktivasi Akun ke Email


Dalam kasus tertentu pada saat user melakukan pendaftaran atau melakukan pembuatan akun , user akan diminta untuk melakukan semacam konfirmasi bahwa akun/email yang didaftarkan benar – benar miliknya. Link konfirmasi/aktivasi akan dikirim ke email, kemudian ketika link pada email diklik maka akun yang didaftarkan akan bisa login atau melanjutkan ke tahap berikutnya. Pada intinya proses ini dilakukan untuk memastikan bahwa akun yang didaftarkan benar – benar valid, yang dalam hal ini adalah akun email yang digunakan untuk mendaftar pada sistem yang kita buat

Desain Database

Saat link konfirmasi / aktivasi akun dikirim ke email yang didaftarkan, dalam contoh kasus yang sederhana, maka link yang dikirim perlu mengandung data berupa email yang didaftarkan beserta kode hash atau semacam token. Sehingga jika demikian maka kita perlu menyimpan sebuah data berupa email dan hash pada database yang nantinya akan dicocokan dengan link yang diklik oleh user

Dalam contoh ini Saya akan menggunakan dua buah tabel pada database MySQL/MariaDB, tabel pertama merupakan tabel user dan kedua tabel pending user. User yang melakukan registrasi pada sistem akan dimasukan ke tabel user dan tabel pending user. Tabel user merupakan berisi data – data untuk login kedalam sistem dan tabel pending user akan menampung data – data untuk melakukan pencocokan link konfirmasi yang digunakan oleh user.

Dalam praktiknya ini agak lumayan kompleks, tapi disini Saya akan buat contoh sederhana saja, dimana disini ketika user dan tabel pending user akan terisi data ketika melakukan registrasi, dan email yang sudah diregistrasikan sebelumnya tidak akan bisa didaftarkan kembali, hanya saja nanti kita akan berikan status 0 (sebagai default data) pada kedua tabel yang belum melukan konfirmasi

Ada dua kondisi yang mungkin disini akan diambil.


  1. User yang telah mendaftar tidak akan bisa login ketika link aktivasi/konfirmasi akun belum di klik
  2. User yang telah mendaftar namun belum melakukan konfirmasi email akan tetap bisa login ke sistem web namun hak akses ke halaman tertentu akan dibatasi atau semacamnya
Dari dua kondisi diatas, Saya akan mencontohkan kondisi yang pertama. Untuk desain databasenya bisa Anda lihat pada kode sql dibawah ini

CREATE TABLE `field_pending_user` (
  `uid` int(10) UNSIGNED NOT NULL COMMENT 'user id',
  `email` varchar(254) NOT NULL COMMENT 'email user pending',
  `hash` varchar(32) NOT NULL COMMENT 'hash for verification',
  `pending_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'status pengaktifkan akun'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `field_pending_user`
--

INSERT INTO `field_pending_user` (`uid`, `email`, `hash`, `pending_status`) VALUES
(1, 'usertest@mail.com', 'a9a1d5317a33ae8cef33961c34144f84', 0),
(2, 'myroot593@gmail.com', '9b04d152845ec0a378394003c96da594', 1);

-- --------------------------------------------------------

--
-- Table structure for table `field_user`
--

CREATE TABLE `field_user` (
  `uid` int(10) UNSIGNED NOT NULL COMMENT 'user id pengguna',
  `username` varchar(60) NOT NULL COMMENT 'username pengguna',
  `email` varchar(254) DEFAULT NULL COMMENT 'email pengguna',
  `pass` varchar(255) NOT NULL COMMENT 'password',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1 user aktif 0 user blokir'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `field_user`
--

INSERT INTO `field_user` (`uid`, `username`, `email`, `pass`, `status`) VALUES
(1, 'user', 'usertest@mail.com', '$2y$10$cB.dHL1R0pdc34A/8ZeZT.2fk2v93gCgrfvOr7b8tx6cJpUmClyrS', 0),
(2, 'aze_', 'myroot593@gmail.com', '$2y$10$WLYIWo.I3o/JN0uKYQ5IGeodCJRcjhdnY2wj3tKDQhdLion2iuftS', 1);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `field_pending_user`
--
ALTER TABLE `field_pending_user`
  ADD PRIMARY KEY (`uid`),
  ADD KEY `mail` (`email`),
  ADD KEY `uid` (`uid`);

--
-- Indexes for table `field_user`
--
ALTER TABLE `field_user`
  ADD PRIMARY KEY (`uid`),
  ADD KEY `uid` (`uid`);



Contoh Kode


Ada beberapa kode yang mungkin perlu kita buat, tapi disini saya akan coba jelaskan poin – poin penting dari tutorialnya saja, dimana kita mengirim link konfirmasi yang berisi hash, serta bagaimana kita mencocokan link/hash yang dikirim melalui email. Ada 3 file yang akan kita buat, yang pertama db.php, index.php dan test_konfirmasi.php


Lihat kodenya di Github myroot593


tampilan saat di eksekusi pada browse

Kurang lebih nanti hasil kode akan terlihat seperti diatas


Tahap selanjutnya kode bisa Anda uji, Anda bisa mengisi beberapa data kemudian lakukan test uji konfirmasi, jika berhasil status pada dua tabel akan menjadi satu (1) seperti yang terlihat pada tabel diatas.


Contoh kode diatas masih belum lengkap karena hanya sebatas menyimpan kode hash ke tabel yang kemudian dicocokan. Karena dalam praktikanya link konfirmasi perlu dikirim ke email yang telah diregistrasikan, maka saat melakukan pendaftaran kita perlu menambahkan fungsi mail() php untuk mengirim kode link konfirmasi ke pesan email

Pada index.php, Anda bisa membuat/menambah parameternya menjadi seperti berikut


<?php

if($obj->insertUser($username, $email, $pass))
		{
			$last=$obj->insertlastid_to_pending_user();
				if($obj->insertPending_user($last, $email, $hash))
				{
					//kita tambahkan
						$to = $email;
						$from = "admin@".$_SERVER['SERVER_NAME']."";
						$subject = "Konfirmasi Akun";					
						$message = '
						Terima kasih sudah mendaftar ! akun Anda sudah dibuat'."\r\n";
						$message .='Anda dapat segera login dengan mengklik'."\r\n";
						$message .='tautan dibawah ini'."\r\n";
						
						

						$message.='-------------------------'."\r\n";
						$message .='Username : '.$username.''."\r\n";
						$message .= 'Password : '.$pass.''."\r\n";
						$message.='-------------------------'."\r\n";
						$message .='Klik link konfirmasi dibawah ini'."\r\n";
						$message .='http://'.$_SERVER['SERVER_NAME'].'/test_konfirmasi.php?email='.$email.'&hash='.$hash.''."\r\n";
							$message .='Anda dapat mengabaikan ini, jika ini bukan Anda'."\r\n";
						$headers = $from;
						
						//mail(to, subject, message, $headers)
						mail($to, $subject, $message, $headers);

					echo "<div class='alert alert-success'>Data berhasil disimpan</div>";
				}
				else
				{
					echo "<div class='alert alert-danger'>Terjadi kesalahan saat menyimpan ke pending user</div>";
				}
		}
		else
		{
			echo "<div class='alert alert-danger'>Gagal menyimpan user</div>";
		}
?>


Untuk melihat hasil apakah link konfirmasi dikirim ke email, maka mungkin Anda perlu menghosting kode tersebut ke webhosting. Dalam kode parameter mail diatas, pada pesan email, Saya menyertakan username dan password yang telah dimasukan oleh user saat mendaftar.



 

Related Posts :

0 Response to "Tutorial PHP : Mengirim Link Aktivasi Akun ke Email"

Post a Comment

Silahkan untuk meninggalkan komentar, santai saja dan mulailah berkomentar...