Home » Tekno » Membuat OTP untuk Login Website dengan Bot Telegram

Membuat OTP untuk Login Website dengan Bot Telegram

Bot Telegram OTP Login

Artikel freemium, membuat kode OTP melalui Bot Telegram sebagai autentikasi login pada sebuah website dengan framework PHP Codeigniter 3.

Mengapa menggunakan Bot Telegram? Ya salah satunya karena simple, open source dan pastinya gratis, tidak perlu memikirkan dan mengeluarkan biaya tambahan untuk menyewa SMS Gateway hanya untuk generate kode OTP misalnya.

Karena tutorial sebelumnya ditulis dengan menggunakan framework Codeigniter, disini saya akan melanjutkannya masih dengan framework tersebut agar terstruktur.

Sebelum lanjut ke pembahasan, ada baiknya anda sudah membaca artikel sebelumnya yaitu:

Autoposting Laporan ke Group dengan Bot Telegram

Jika sudah paham dasar-dasarnya, mari kita lanjutkan. Oiya sekedar info, artikel ini sifatnya freemium ya, maksudnya saya tidak akan menjelaskan source code secara detail satu-persatu, melainkan hanya poin-poinnya saja.

Jika anda ingin source code secara lengkap tenang saja, silahkan order Ebook + Source Code nya pada link (nyusul).


Persiapan Awal : Tools yang Diperlukan Bot Telegram OTP

Silahkan download framework PHP Codeigniter pada website resminya disini, saya masih menggunakan versi 3. Jika anda mau pakai versi 4 silahkan disesuaikan saja, karena dasarnya tetap sama.

Sudah punya Bot Telegram? Jika belum silahkan ikuti artikel ini : Membuat Bot Telegram dari Dasar (Coding dan Tanpa Coding). Jika sudah ada, silahkan simpan atau catat Token Bot nya pada teks editor kesayangan anda.

Jika sudah ada, Let’s Coding!


Menjalankan Codeigniter dan Struktur Database

Silahkan ekstrak dan pindahkan folder Codeigniter3 tadi ke direktori web server. Sebagai contoh disini saya menggunakan nama bot_telegram_otp sebagai nama project-nya.

Sehingga tampilan defaultnya menjadi seperti ini.

Tampilan Standar CI3 - Bot Telegram OTP
Tampilan Standar CI3

Selanjutnya adalah membuat database, disini nama database yang saya gunakan bernama: bot_telegram. Jika sudah, silahkan buat struktur tabel users seperti berikut ini.

Struktur Table users

Struktur tabel ini sama dengan tulisan yang pernah saya posting pada blog ini.

Jika sudah, tahap berikut nya adalah membuat bot telegram yang akan digunakan untuk proses registrasi. Jadi biar enak, registrasi usernya dilakukan langsung via Bot Telegram, agar Telegram ID nya bisa dideteksi secara otomatis.

Bot Telegram untuk Proses Registrasi User

Sebagai informasi, bot Telegram yang saya gunakan disini yaitu menggunakan bahasa pemrograman MoonScript dengan memanfaatkan fungsi atau metode IO.popen untuk mengeksekusi perintah yang akan digunakan pada proses registrasi user.

Contoh Bot Telegram publik yang menggunakan bahasa MoonScript ini yaitu Jack Telegram Bots.

Alur registrasinya yaitu seperti ini:

  1. User melakukan register melalui Bot Telegram
    Hal ini digunakan untuk mengambil parameter Telegram ID dari user yang akan melakukan registrasi.
  2. Informasi dari user, yaitu: Nama dan Telegram ID tersimpan ke database
  3. User mendapatkan balasan dari Bot Telegram beserta link untuk melanjutkan proses registrasi dan membuat password yang akan digunakan untuk proses login.

Sampai disini, tugas Bot Telegram untuk proses registrasi telah selesai.

Membuat Logic Web dengan CodeIgniter

Seperti biasa, jangan lupa untuk merubah config database pada berkas application/config/database.php. Contohnya seperti ini :

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'P@ssw0rd',
	'database' => 'apps_clients',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

Ubah juga berkas autoload pada application/config/autoload.php menjadi seperti ini :

$autoload['packages'] = array();
$autoload['libraries'] = array('database','session');
$autoload['drivers'] = array();
$autoload['helper'] = array('url', 'file', 'form');
$autoload['config'] = array();
$autoload['language'] = array();
$autoload['model'] = array();

Jika sudah, kita lanjutkan dengan membuat Controllers dan Models.

Membuat Controllers dan Models Register

Buat Controller dengan nama Register.php pada application/controllers/Register.php.

Isinya seperti di bawah ini.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Register extends CI_Controller {

	function __construct(){
        parent::__construct();
        $this->load->model('m_register');
    }

    function index(){
        $telegram_id = $this->input->get('telegram_id');
        $name = $this->input->get('name');
        $username = $this->input->get('username');
        $password = '-';
        $auth_code = '-';

        $user_data = array(
            'telegram_id' => $telegram_id,
            'name' => $name,
            'username' => $username,
            'password' => $password,
            'auth_code' => $auth_code
            );

        $existing = array(
            'telegram_id' => $telegram_id
            );

        $result = $this->m_register->checking("users",$existing);
        $cek = $this->m_register->checking("users",$existing)->num_rows();

        if($cek > 0){
            echo "<title>Bot Telegram OTP</title>
            <code>Telegram ID : $telegram_id sudah terdaftar</code>";
            echo "";
        } else {
            $this->db->insert('users', $user_data);
            echo "<title>Bot Telegram OTP</title>
            Register Sukses, Telegram ID Anda : &lt;code&gt;$telegram_id&lt;/code&gt;. Klik link di bawah ini untuk melanjutkan proses registrasi.";
        }
    }   
}

Penjelasan:

  • Nama Controllers yaitu Register
  • Disini saya menggunakan metode GET, hal ini nantinya bertujuan untuk mempermudah proses registrasi dengan bot Telegram
  • Untuk field password dan auth_code sebagai awalan kita isi saja dengan “-” terlebih dahulu, nantinya akan di update pada saat proses melanjutkan registrasi
  • Controllers di atas memanggil Models yang saya namai dengan m_register, sehingga kita harus membuat berkas Models dengan nama M_register.php. Pada model tersebut dilakukan pengecekkan apakah user sudah terdaftar atau memang belum
  • Jika sudah terdaftar akan ada keterangan user sudah terdaftar, jika belum maka user akan diinput ke database
  • Selesai

Untuk berkas M_register.php silahkan isikan seperti di bawah ini.

<?php class M_register extends CI_Model{ function checking($table,$where){ return $this->db->get_where($table,$where); } }

Sekarang kita testing terlebih dahulu untuk memastikan fungsi register tersebut berjalan, yaitu dengan memasukan user dummy pada url. Contohnya silahkan copy paste url berikut ini:

https://localhost/bot_telegram_otp/register?telegram_id=12345678&name=Gorgom&username=gorgom@email.com

Jika berjalan dengan baik, hasilnya akan seperti tampilan di bawah ini.

User Dummy Register

Jika sudah tidak ada error, mari kita lanjutkan dengan membuat fungsi next pada Controllers Register. Tujuannya adalah sebagai proses melanjutkan register dan membuat password, seperti alur yang sudah saya jelaskan di atas.

Edit berkas Register.php dengan menambahkan 2 (dua) fungsi berikut ini.

1) Function next : ini berisi form untuk membuat password baru.

function next()
    {
        $data['telegram_id'] = $this->input->get('telegram_id');
        $this->load->view('next',$data);
    }

2) Fungsi save : ini berfungsi untuk menyimpan password baru yang dibuat pada fungsi next.

function save(){
        $telegram_id = $this->input->post('telegram_id');
        $password = $this->input->post('password');
        $password_hash = md5($password);

        $existing = array(
            'telegram_id' => $telegram_id
            );

        $result = $this->m_register->checking("users",$existing);
        $cek = $this->m_register->checking("users",$existing)->num_rows();

        if($cek > 0){
            $this->db->query("UPDATE users SET password='$password_hash' WHERE telegram_id='$telegram_id';");
            echo "<title>Bot Telegram OTP</title>
            <code>Password baru berhasil di-buat!</code>";
        } else {
            echo "<title>Bot Telegram OTP</title>
            <code>User tidak ditemukan!</code>";
        }
        
    }

Jika sudah mari kita lakukan testing kembali menggunakan data dummy yang tadi. Pada respon registrasi berhasil, disana bisa kita lihat terdapat link yang bertuliskan “Klik disini untuk melanjutkan proses registrasi”.

Jika kita klik, maka akan di arahkan ke halaman selanjutnya yaitu membuat password baru.

Agar lebih jelas silahkan lihat gambar berikut ini, alur registrasi via Bot Telegram sampai dengan langkah membuat password baru.

Register web via Telegram bots
Register web via Telegram bots

Catatan : karena ini masih local development, silahkan disesuaikan IP Address nya jika dibuka dari perangkat yang berbeda, seperti dari handphone misalnya.

Sekarang kita klik link yang diberikan oleh Bot Telegram, sehingga kita akan di arahkan ke halaman untuk membuat password baru seperti ini.

Buat Password Baru - Telegram bot OTP
Halaman Buat Password Baru

Isi dan submit form tersebut, lalu cek di database, apakah ikut berubah?

Table Users update password

Jawabannya: Ya, password berhasil diperbarui. Langkah selanjutnya adalah membuat fungsi Login pada website dan generate OTP otomatis via Bot Telegram.

Inilah sebenarnya yang menjadi fokus bahasan pada artikel ini.

Membuat Controllers, Models dan Views Login

Untuk Controllers Login, buat berkas di folder yang sama dengan Controllers Register yaitu pada application/controllers/Login.php.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Login extends CI_Controller {

    function __construct(){
        parent::__construct();
        $this->load->model('m_login');
    }

    function index()
    {
        $this->load->view('login');
    }

    function otp_auth()
    {
        $this->load->view('verifikasi');
    }


    function validate(){
        $username = strtolower($this->input->post('username'));
        $password = $this->input->post('password');

        $where = array(
            'username' => $username,
            'password' => md5($password),
            );

        $result = $this->m_login->cek_login("users",$where);
        $avail = $this->m_login->cek_login("users",$where)->num_rows();

        if($avail > 0 ){
            $avail = $result->row_array();
            $data_session = array(
                'username' => $avail['username'],
                'name' => $avail['name'],
                'telegram_id' => $avail['telegram_id'],
                'status' => "login"
                );

            $this->session->set_userdata($data_session);

            // FREEMIUM
 
        } else {
            $data["error"]="Invalid credentials.";
            $this->load->view('login',$data);
        }
    }   
}

Untuk Models M_login silahkan isi dengan ini.

<?php
 
class M_login extends CI_Model{

    function cek_login($table,$where){     
        return $this->db->get_where($table,$where);
    }

}

Selanjutnya, buat 2 (dua) buah berkas views yaitu login.php dan verifikasi.php.

1) Views login : ini merupakan tampilan halaman Login

<!DOCTYPE html>
<html lang="id">
<head>
  <title>Bot Telegram OTP</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="container">
  <br/>
      <div class="small text-muted">Home » Login</div>
      <hr>
      <div class="col-md-6">
      <h4>Login</h4>
      <form method="POST" action="<?php echo base_url()?>login/validate/">
        <div class="form-group">
          <label for="nama">Username:</label>
          <input type="text" class="form-control" id="username" placeholder="Username . . ." name="username" required>
        </div>

        <div class="form-group">
          <label for="nama">Password:</label>
          <input type="password" class="form-control" id="password" placeholder="Password . . ." name="password" required>
        </div>
        
        <button type="submit" class="btn btn-primary btn-block">Login</button>
      </form>
    </div>
</div>
 
</body>
</html>

2) Views verifikasi : ini merupakan tampilan halaman untuk memasukan kode OTP jika username dan password pada halaman login cocok.

<!DOCTYPE html>
<html lang="id">
<head>
  <title>Bot Telegram OTP</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="container">
  <br/>
      <div class="small text-muted">Home » Login OTP</div>
      <hr>
      <div class="col-md-6">
      <h4>Login OTP</h4>
      <form method="POST" action="<?php echo base_url()?>login/validate/">
        <div class="form-group">
          <label for="nama">OTP:</label>
          <input type="tel" class="form-control" id="otp" placeholder="Kode OTP . . ." name="auth_code" required>
        </div>
        
        <button type="submit" class="btn btn-primary btn-block">Verify</button>
      </form>
    </div>
</div>
 
</body>
</html>

Jika sudah, silahkan simpan dan sekarang waktunya kita test proses login, tampilannya seperti gambar di bawah ini.

Tampilan Halaman Login
Tampilan Halaman Login

Sekarang saya akan masukan username dan password yang sebelumnya sudah dibuat pada saat registrasi.

Dan bisa kita lihat, pada bagian kanan bawah ada notifikasi dari aplikasi Telegram desktop saya yang isinya merupakan kode OTP dari Bot Telegram.

Kode OTP dengan Bot Telegram
Kode OTP Login Web via Bot Telegram

Sekarang kita cocokan, apakah kode OTP yang dikirimkan oleh Bot Telegram sesuai dengan kolom auth_code pada username saya? Mari kita buktikan.

Tampilan database OTP bot telegram

Hasilnya adalah sama, maka jika dimasukan pada halaman verifikasi kode tersebut adalah Valid. Perlu dicatat disini saya tidak terlalu memikirkan soal security melainkan hanya dasar-dasarnya saja.

Karena tujuan saya disini adalah menjelaskan bagaimana caranya memanfaatkan Bot Telegram untuk proses autentikasi Login OTP pada sebuah website.

Jadi jika ingin lebih aman misalnya untuk menghindari SQL Injection dan yang lainnya, silahkan disesuaikan sendiri ya.

Bagaimana, apakah anda tertarik membuatnya atau perlu source code secara lengkap?

Jika ya, silahkan hubungi saya via formulir kontak atau tinggalkan komentar pada kolom yang telah disediakan.

Live Demo OTP dengan Bot Telegram >>> : Bots wadagizig.

Gak mau pusing coding buat bikin Bot Telegram? Ini dia solusinya!

Jasa Pembuatan Bot Telegram Hanya 50 ribu !

1 Komentar

Tinggalkan Komentar

Field bertanda * wajib diisi

− 1 = 1