Library kelola OTP

Maintainers

Package info

github.com/esoftdream/otp

pkg:composer/esoftdream/otp

Statistics

Installs: 675

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.2.0 2026-06-04 07:55 UTC

This package is auto-updated.

Last update: 2026-06-04 07:57:02 UTC


README

Modul untuk menangani pembuatan dan verifikasi One-Time Password (OTP) secara aman dan tangguh untuk proyek PHP (CodeIgniter 4).

Fitur Utama

  • Resiliensi Tinggi: Mendukung verifikasi terhadap beberapa kode OTP aktif secara bersamaan (mencegah masalah klik ganda atau delay pengiriman).
  • Normalisasi Input Otomatis: Secara cerdas membersihkan spasi, simbol, dan menangani leading zeros (angka nol di depan).
  • Keamanan: Penyimpanan kode menggunakan hashing Bcrypt.
  • Standar Waktu UTC: Menggunakan standar UTC untuk mencegah masalah perbedaan zona waktu server.

Persyaratan

  • PHP 8.1 atau lebih baru
  • Proyek berbasis CodeIgniter 4

Instalasi Database

Jalankan migration untuk membuat tabel log_otp:

php spark migrate:latest -n Esoftdream\OTP

Cara Penggunaan

1. Inisialisasi

Ada dua cara untuk menginisialisasi modul ini, tergantung apakah User ID sudah tersedia atau belum:

A. Menggunakan User ID (Kasus Umum)

Gunakan cara ini jika user sudah terdaftar di database (misalnya untuk Forgot Password, Verifikasi Transaksi, dll):

use Esoftdream\OTP\OTP;

// Parameter: userType, userId
$otp = new OTP('member', 123);
$otp->type = 'forgot_password'; // Wajib set tipe kegunaan OTP

B. Menggunakan Identifier (Kasus Registrasi / User belum ada)

Jika User ID belum dibuat di database (misalnya verifikasi email/telepon saat registrasi), Anda bisa menggunakan identifier unik seperti email atau nomor telepon sebagai gantinya:

use Esoftdream\OTP\OTP;

// Parameter: userType, userId (null), db connection (null), identifier
$otp = new OTP('member', null, null, 'john.doe@example.com');
$otp->type = 'registration';

Pengaturan Opsional

Anda juga bisa mengatur panjang kode OTP (default 6 digit) dan masa berlaku (default 10 menit):

$otp->setLength(6)->setExpiry(5);

2. Membuat OTP (Generate)

$result = $otp->generate();

/**
 * $result berisi:
 * [
 *    'otp' => '102678',
 *    'expired' => '2026-04-14 14:30:00'
 * ]
 */

3. Verifikasi OTP

Sistem ini sangat fleksibel. Pengguna dapat menginput kode dengan spasi atau simbol, dan jika ada pengiriman ulang, kode sebelumnya (jika belum expired) akan tetap bisa divalidasi.

try {
    // Input bisa berupa ' 10-26 78 ', akan tetap diproses sebagai '102678'
    if ($otp->verify($userInput)) {
        echo "OTP Berhasil divalidasi!";
    }
} catch (\Exception $e) {
    // Menangani error: 'Kode OTP tidak ditemukan', 'Kode OTP tidak valid', atau 'Kode OTP sudah kedaluwarsa'
    echo "Gagal: " . $e->getMessage();
}

Kontribusi

Silakan ajukan PR untuk peningkatan fitur atau perbaikan bug. Pastikan untuk selalu menjalankan unit test sebelum melakukan commit.

./vendor/bin/phpunit tests/OTPTest.php