Cara Membuat Email OTP dengan Express.JS + MongoDB

Hendrico Kristiawan
4 min readMay 8, 2022

--

Penggunaan kode OTP sebagai metode verifikasi merupakan cara yang umum digunakan. Biasanya kode OTP akan dikirimkan melalui email atau sms dan kita akan memasukkan kode yang kita terima ke input yang diberikan. Pada artikel kali ini, mari kita pelajari bagaimana cara membuat email OTP sederhana dengan menggunakan Express.JS dan MongoDB.

Requirement

Sebelum kita mulai mulai ke tutorial, ada beberapa hal yang perlu kalian persiapkan.

  1. Sudah mengerti Node.JS
  2. Sudah mengerti MongoDB
  3. Memiliki akun gmail yang sudah 2FA karena kita akan menggunakan gmail untuk mengirimkan email.

Tutorial

1. Membuat default project Express.JS yang sudah dapat connect ke MongoDB
Untuk langkah ini seharusnya kalian sudah bisa melakukannya jika ingin membuat OTP. Jika masih belum bisa, kalian dapat melihat tutorial lain atau disini.

2. Install dependensi tambahan yang dibutuhkan
Disini kita membutuhkan 2 dependensi baru. Yaitu otp-generator dan nodemailer.

npm install otp-generator nodemailer

3. Membuat router baru yang akan digunakan untuk OTP
Pada contoh ini, saya akan menggunakan path /otp agar dapat digunakan.

4. Menambahkan model OTP
Tentu saja kita perlu membuat objek OTP pada database yang kita gunakan. Sehingga jika user memasukkan kode OTP, kita dapat mengetahui apakah kode OTP tersebut sudah pernah dibuat atau belum.

Disini kita hanya membutuhkan 2 atribut saja. Yaitu otp sebagai kode otp dan expired_time untuk kapan kode ini akan invalid dan tidak bisa digunakan lagi.

5. Mendapatkan password aplikasi gmail
Password ini dapat digunakan oleh pihak ke 3 untuk mengakses akun gmail. Sehingga jangan sampai kode ini diketahui oleh orang lain. Untuk mendapatkan password ini perlu melakukan 2FA terlebih dahulu. Jika sudah, kalian dapat menemukan menu ini pada bagian security -> Signing in to Google -> app password

Selanjutnya kalian hanya perlu memasukkan aplikasi apa yang akan digunakan dan dari mana akan diakses. Setelah itu pilih generate.

Selanjutnya kalian akan mendapatkan password tersebut dan password tersebut siap untuk digunakan. Namun kamu perlu mencatat password tersebut karena tidak dapat dilihat lagi setelah selesai.

5. Menambahkan router OTP
Setelah kita membuat path dan model, maka sekarang kita akan membuat file router untuk OTP. Untuk file router ini hanya terdapat 2 fungsi. Yaitu fungsi untuk mengirim email dan fungsi untuk verifikasi OTP. Namun sebelum membuat fungsi tersebut, kita perlu membuat fungsi tambahan yang akan membantu kita dalam menghitung waktu expired OTP.

Fungsi pembantu

Penjelasan:

  • addMinutesToDate: Sesuai dengan namanya, fungsi ini hanya menambahkan waktu yg kita berikan dengan menit yang ditentukan. Misalnya jika kita ingin membuat OTP yang expired hanya dengan 5 menit, maka kita hanya perlu menambahkan 5 menit dari waktu sekarang.
  • compare: Fungsi ini kita gunakan untuk membandingkan waktu expired dengan waktu sekarang. Jika waktu sekarang belum elewati expired, maka akan mengembalikan 1.

Mengirim email

Penjelasan:

  • Line 4: otpGenerator merupakan hasil import dari dependensi otp-generator yang sudah kita install. Disitu kita membuat kode OTP sepanjang 6 yang hanya huruf kecil saja.
  • Line 13–21: Disini kita menentukan email apa yang akan kita gunakan. Karena disini kita menggunakan gmail, maka hostnya adalah smtp.gmail.com. Selanjutnya untuk autentikasi, kita hanya perlu memasukkan gmail dan password aplikasi yang sudah kita buat sebelumnya.
  • Line 22–34: Selanjutnya kita membuat email apa yang ingin kita kirimkan. Untuk mengisinya cukup mudah karena formatnya sama seperti kita ingin membuat email biasa.
  • Line 37–43: Tahap terakhir adalah mengirimkan email tersebut. Kita perlu menggunakan try catch agar kita mengetahui apakah email yang dikirimkan berhasil atau gagal.

Verifikasi OTP

Penjelasan:

Untuk bagian ini cukup mudah untuk dimengerti. Untuk verifikasi kalian hanya perlu mengecek apakah OTP tersebut ada di database dan apakah kode tersebut masih aktif atau tidak. Jika OTP tersebut memenuhi syarat, maka OTP tersebut harus kita hapus agar tidak bisa digunakan kembali oleh orang lain. Selanjutnya kita dapat memperbarui status user menjadi sudah terverifikasi.

Berikut merupakan tutorial bagaimana cara membuat OTP sederhana dengan email. Kalian masih dapat menerapkan cara ini dengan variasi lain untuk meningkatkan keamanan seperti user A tidak bisa melakukan verifikasi dengan kode OTP user B. Namun untuk hal tersebut dapat menjadi tugas bagi kalian untuk berkembang :)

--

--