Cara Membuat Sistem OTP Verification dengan Node.js
OTP (One-Time Password) adalah kode verifikasi sekali pakai yang digunakan untuk meningkatkan keamanan dalam proses autentikasi. Sistem ini banyak digunakan pada login, reset password, hingga verifikasi nomor telepon atau email. Dengan OTP, akses ke akun menjadi lebih aman karena membutuhkan kode tambahan yang bersifat sementara.
Dalam artikel ini, akan dibuat sistem OTP sederhana menggunakan Node.js yang dapat mengirim dan memverifikasi kode OTP.
Persiapan Project
Buat project baru dan install dependency yang dibutuhkan:
mkdir otp-system
cd otp-system
npm init -y
npm install express nodemailer otp-generator
Penjelasan:
– express untuk server
– nodemailer untuk kirim email
– otp-generator untuk membuat kode OTP
Membuat Server Dasar
Buat file index.js:
const express = require('express');
const app = express();
app.use(express.json());
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Membuat Generate OTP
Tambahkan fungsi untuk generate OTP:
const otpGenerator = require('otp-generator');
function generateOTP() {
return otpGenerator.generate(6, {
upperCase: false,
specialChars: false
});
}
Menyimpan OTP Sementara
Gunakan object sederhana sebagai penyimpanan sementara:
const otpStore = {};
Membuat Endpoint Kirim OTP
const nodemailer = require('nodemailer');
app.post('/send-otp', async (req, res) => {
const { email } = req.body;
const otp = generateOTP();
otpStore[email] = {
otp,
expires: Date.now() + 300000
};
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '[email protected]',
pass: 'your-app-password'
}
});
await transporter.sendMail({
from: '[email protected]',
to: email,
subject: 'Kode OTP',
text: `Kode OTP Anda: ${otp}`
});
res.json({ message: 'OTP dikirim' });
});
Membuat Endpoint Verifikasi OTP
app.post('/verify-otp', (req, res) => {
const { email, otp } = req.body;
const data = otpStore[email];
if (!data) {
return res.status(400).json({ message: 'OTP tidak ditemukan' });
}
if (Date.now() > data.expires) {
return res.status(400).json({ message: 'OTP kadaluarsa' });
}
if (data.otp !== otp) {
return res.status(400).json({ message: 'OTP salah' });
}
delete otpStore[email];
res.json({ message: 'OTP valid' });
});
Pengembangan Lebih Lanjut
Sistem ini masih sederhana dan bisa dikembangkan lebih lanjut dengan:
– menyimpan OTP di database
– menambahkan rate limiter
– menggunakan SMS gateway
– menambahkan retry limit
Selain itu, penting untuk memastikan OTP tidak bisa digunakan ulang dan memiliki waktu kadaluarsa yang jelas.
Keamanan dalam Sistem OTP
OTP memang meningkatkan keamanan, tetapi tetap harus diimplementasikan dengan benar. Tanpa proteksi tambahan seperti pembatasan percobaan atau validasi input, sistem masih bisa disalahgunakan.
Penggunaan HTTPS, enkripsi data, serta pembatasan akses menjadi bagian penting dalam membangun sistem autentikasi yang aman dan stabil.
Hubungi Kami
Jika membutuhkan pengembangan sistem autentikasi, API, atau keamanan aplikasi berbasis OTP dan teknologi modern, penanganan yang tepat akan membantu membangun sistem yang aman dan siap digunakan.
Hubungi Kami melalui kontak resmi.