Book your free demo

Discover how our product can simplify your workflow. Schedule a free, no-obligation demo today.

    Social Media:

    ilustrasi sistem otp verification dengan keamanan kode verifikasi dan autentikasi pengguna

    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.

    Popular Tags:
    Admin

    PT. Siber Shop Teknologi Indonesia

    Leave a comment

    Your email address will not be published. Required fields are marked *