Login dengan kode OTP adalah metode aman untuk proses otentikasi pengguna. Dalam metode ini, kata sandi satu kali dibuat secara dinamis dan dikirim ke pengguna yang mencoba masuk. OTP dapat dikirim ke email pengguna atau ponselnya. Ketika pengguna memasukkan kode OTP maka aplikasi akan mengotentikasi pengguna melalui kode ini.
Dalam tutorial ini, kita akan melihat contoh untuk mengotentikasi login pengguna melalui kode OTP menggunakan email . Dalam tutorial sebelumnya, kami telah melihat kode PHP untuk masuk dengan nama pengguna dan kata sandi . Dalam contoh ini, ketika pengguna terdaftar memasukkan email untuk login, kode OTP dikirim ke alamat email. Dengan menggunakan kode OTP ini, pengguna akan divalidasi. Setelah pengguna menggunakan kode ini maka itu akan menjadi tidak valid, yang berarti tidak dapat digunakan lagi. Selain itu, token ini akan berlaku selama satu hari, maka akan kedaluwarsa.

Formulir Login dengan OTP
Kode berikut menunjukkan form login kepada pengguna untuk memasukkan alamat emailnya. Saat memasukkan email, ini menunjukkan masukan untuk memasukkan kode OTP yang dikirim ke alamat emailnya. Setelah mengirimkan OTP, PHP akan memvalidasi kode dan menampilkan hasil otentikasi kepada pengguna.
<form name = "frmUser" method = "posting" action = ""> <div class = "tblLogin"> <? php if (! empty ($ success == 1)) { ?> <div class = "tableheader"> Masukkan OTP </ div> <p style = "color: # 31ab00;"> Periksa email Anda untuk OTP </ p> <div class = "tablerow"> <input type = "text" name = "otp" placeholder = "One Time Password" class = "login-input" diperlukan> </ div> <div class = "tableheader"> <input type = "submit" name = "submit_otp" value = "Kirim" class = "btnSubmit"> </ div> <? php } else if ($ success == 2) { ?> <p style = "color: # 31ab00;"> Selamat datang, Anda telah berhasil masuk! </ p> <? php } lain { ?> <div class = "tableheader"> Masukkan Email Masuk Anda </ div> <div class = "tablerow"> <input type = "text" name = "email" placeholder = "Email" class = "login-input" diperlukan> </ div> <div class = "tableheader"> <input type = "submit" name = "submit_email" value = "Kirim" class = "btnSubmit"> </ div> <? php } ?> </ div> </ form>
Kode PHP untuk Memvalidasi Otentikasi OTP
Saat mengirimkan alamat email, skrip PHP memvalidasi pengguna dengan memeriksa database pengguna apakah itu email terdaftar. Jika demikian, kode OTP 6 digit dihasilkan secara dinamis dengan menggunakan fungsi PHP rand () . Anda dapat memilih untuk menggantikan logika pembuatan kode acak ini menggunakan mekanisme pilihan Anda. Kode ini dikirim ke email pengguna dengan menggunakan PHPmailer.

Ketika pengguna menyerahkan kode OTP ke PHP, itu memvalidasi kode dengan memeriksa kedaluwarsa. Kode ini berlaku untuk satu hari dan akan kedaluwarsa setelah digunakan. Kode PHP adalah,
<? php $ success = ""; $ error_message = ""; $ conn = mysqli_connect ("localhost", "root", "", "blog_samples"); if (! empty ($ _ POST ["submit_email"])) { $ result = mysqli_query ($ conn, "SELECT * FROM registered_users WHERE email = '". $ _POST ["email"]. "'"); $ count = mysqli_num_rows ($ hasil); if ($ count> 0) { // buat OTP $ otp = rand (100000,999999); // Kirim OTP require_once ("mail_function.php"); $ mail_status = sendOTP ($ _ POST ["email"], $ otp); if ($ mail_status == 1) { $ result = mysqli_query ($ conn, "INSERT INTO otp_expiry (otp, is_expired, create_at) VALUES ('". $ otp. "', 0, '". tanggal ("Ymd H: i: s"). "') "); $ current_id = mysqli_insert_id ($ conn); if (! empty ($ current_id)) { $ success = 1; } } } lain { $ error_message = "Email tidak ada!"; } } if (! empty ($ _ POST ["submit_otp"])) { $ result = mysqli_query ($ conn, "SELECT * FROM otp_expiry WHERE otp = '". $ _POST ["otp"]. "' DAN is_expired! = 1 DAN SEKARANG () <= DATE_ADD (create_at, INTERVAL 24 JAM)") ; $ count = mysqli_num_rows ($ hasil); if (! empty ($ count)) { $ result = mysqli_query ($ conn, "UPDATE otp_expiry SET is_expired = 1 WHERE otp = '". $ _POST ["otp"]. "'"); $ success = 2; } lain { $ success = 1; $ error_message = "OTP Tidak Valid!"; } } ?>
Tutorial kode PHP ini diterbitkan pada 21 Maret 2017.
