tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
No Result
View All Result
Home Backend

Membuat Sistem Login dan Register dengan Laravel Indonesia: Keamanan Website Terjamin

Elara Meadowlight by Elara Meadowlight
October 14, 2025
in Backend, Keamanan, Laravel, Otentikasi, Pemrograman
0
Share on FacebookShare on Twitter

Laravel, framework PHP yang elegan dan populer, menawarkan kemudahan luar biasa dalam membangun aplikasi web, termasuk sistem login dan register yang aman. Di era digital ini, keamanan website adalah prioritas utama. Artikel ini akan memandu Anda, khususnya developer di Indonesia, tentang cara membuat sistem login dan register dengan Laravel Indonesia yang kuat, handal, dan tentunya, menjamin keamanan website Anda. Mari kita mulai!

Mengapa Laravel untuk Sistem Login dan Register?

Sebelum membahas langkah-langkah implementasi, mari kita pahami mengapa Laravel menjadi pilihan ideal untuk membuat sistem login dan register yang aman.

  • Keamanan Bawaan: Laravel dilengkapi dengan fitur keamanan built-in seperti cross-site scripting (XSS) protection, cross-site request forgery (CSRF) protection, dan hashing password yang kuat menggunakan algoritma bcrypt. Ini secara signifikan mengurangi risiko serangan.
  • Artisan Console: Command-line interface (CLI) Artisan mempermudah pembuatan kerangka dasar aplikasi, termasuk migrasi database, controller, dan model. Ini mempercepat proses pengembangan.
  • ORM Eloquent: Eloquent ORM (Object Relational Mapper) memudahkan interaksi dengan database menggunakan sintaks yang intuitif dan mudah dipahami.
  • Templating Engine Blade: Blade menyediakan cara yang ringkas dan ekspresif untuk mendefinisikan layout dan tampilan aplikasi.
  • Komunitas Aktif dan Dukungan Luas: Laravel memiliki komunitas yang besar dan aktif di Indonesia dan seluruh dunia. Ini berarti Anda akan mudah menemukan bantuan dan solusi jika menghadapi masalah.
  • Paket dan Library yang Kaya: Composer, package manager PHP, memungkinkan Anda dengan mudah menginstal dan menggunakan berbagai paket dan library Laravel untuk memperluas fungsionalitas aplikasi Anda, termasuk paket autentikasi yang disederhanakan.

Persiapan Awal: Menginstal Laravel dan Konfigurasi Database

Sebelum mulai membuat sistem login dan register dengan Laravel Indonesia, pastikan Anda telah memenuhi persyaratan berikut:

  • PHP: Versi PHP 8.1 atau lebih tinggi.
  • Composer: Dependency manager PHP.
  • Database: MySQL, PostgreSQL, SQLite, atau SQL Server.
  • Web Server: Apache atau Nginx.

Langkah 1: Instalasi Laravel

Related Post

Integrasi CRM dengan Sistem Akuntansi di Indonesia: Efisiensi Bisnis Tanpa Batas

December 6, 2025

Cara Membuat Model AI dengan Tensorflow: Panduan Lengkap untuk Pemula

December 2, 2025

AI untuk Prediksi Harga Saham di Indonesia: Analisis Data untuk Investasi Cerdas

December 2, 2025

Contoh Project Laravel Open Source: Inspirasi & Referensi Kode

November 30, 2025

Buka terminal atau command prompt Anda dan jalankan perintah berikut untuk membuat proyek Laravel baru:

composer create-project laravel/laravel nama-proyek
cd nama-proyek

Ganti nama-proyek dengan nama proyek yang Anda inginkan.

Langkah 2: Konfigurasi Database

Buka file .env di direktori proyek Anda. Ubah pengaturan database sesuai dengan konfigurasi database yang Anda gunakan. Contoh untuk MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=nama_pengguna
DB_PASSWORD=kata_sandi

Ganti nama_database, nama_pengguna, dan kata_sandi dengan kredensial database Anda.

Langkah 3: Migrasi Database Awal

Laravel sudah menyediakan migrasi default untuk membuat tabel users. Jalankan perintah berikut untuk menjalankan migrasi:

php artisan migrate

Perintah ini akan membuat tabel users di database Anda. Tabel ini akan digunakan untuk menyimpan informasi pengguna.

Membuat Controller dan Route untuk Login dan Register

Sekarang, kita akan membuat controller dan route untuk menangani logika login dan register.

Langkah 1: Membuat Controller Autentikasi

Laravel menyediakan Artisan command untuk membuat controller autentikasi secara otomatis. Jalankan perintah berikut:

php artisan make:auth

Perintah ini akan membuat controller HomeController, view home.blade.php, dan route yang diperlukan untuk autentikasi dasar.

Langkah 2: Menyesuaikan Controller (Opsional)

Anda mungkin perlu menyesuaikan controller AuthController (atau RegisterController dan LoginController tergantung versi Laravel) dan HomeController untuk memenuhi kebutuhan aplikasi Anda. Misalnya, Anda mungkin ingin menambahkan validasi tambahan untuk data pendaftaran atau mengarahkan pengguna ke halaman yang berbeda setelah login.

Langkah 3: Route untuk Sistem Login dan Register

Secara default, route untuk login dan register akan terdaftar di file routes/web.php. Jika Anda tidak menggunakan php artisan make:auth, Anda perlu mendefinisikan route tersebut secara manual:

Route::get('/register', 'RegisterController@showRegistrationForm')->name('register');
Route::post('/register', 'RegisterController@register');

Route::get('/login', 'LoginController@showLoginForm')->name('login');
Route::post('/login', 'LoginController@login');

Route::post('/logout', 'LoginController@logout')->name('logout');

Route::get('/home', 'HomeController@index')->name('home');

Pastikan controller yang Anda gunakan (misalnya RegisterController, LoginController, HomeController) sesuai dengan nama controller yang telah Anda buat.

Implementasi View untuk Login dan Register di Laravel

Setelah membuat controller dan route, saatnya mengimplementasikan view untuk login dan register.

Langkah 1: Membuat File View

Buat dua file Blade baru di direktori resources/views/auth:

  • register.blade.php untuk halaman register.
  • login.blade.php untuk halaman login.

Langkah 2: Kode View untuk Register (register.blade.php)

Berikut contoh kode untuk halaman register:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Langkah 3: Kode View untuk Login (login.blade.php)

Berikut contoh kode untuk halaman login:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Login') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>

                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Pastikan Anda memiliki file resources/views/layouts/app.blade.php yang berisi struktur dasar HTML aplikasi Anda, termasuk tag <head> dan <body>. Contoh sederhana:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Laravel</title>

    <!-- Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

    <!-- Styles -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        @yield('content')
    </div>
</body>
</html>

Validasi Input dan Hashing Password untuk Keamanan Optimal

Validasi input sangat penting untuk mencegah serangan seperti SQL injection dan XSS. Laravel menyediakan fitur validasi yang kuat dan mudah digunakan.

Langkah 1: Validasi Data Pendaftaran

Di dalam method register di controller RegisterController, tambahkan validasi untuk data pendaftaran:

use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;

protected function register(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);

    if ($validator->fails()) {
        return redirect('register')
                    ->withErrors($validator)
                    ->withInput();
    }

    $user = User::create([
        'name' => $request['name'],
        'email' => $request['email'],
        'password' => Hash::make($request['password']),
    ]);

    auth()->login($user);

    return redirect('/home');
}

Kode di atas melakukan validasi berikut:

  • name: Wajib diisi, string, maksimal 255 karakter.
  • email: Wajib diisi, string, format email yang valid, maksimal 255 karakter, harus unik di tabel users.
  • password: Wajib diisi, string, minimal 8 karakter, harus sama dengan field password_confirmation.

Langkah 2: Hashing Password

Saat menyimpan password ke database, jangan pernah menyimpan password dalam bentuk plain text. Gunakan fungsi Hash::make() untuk melakukan hashing password menggunakan algoritma bcrypt yang aman. Seperti yang terlihat pada kode di atas, password di-hash sebelum disimpan ke database:

'password' => Hash::make($request['password']),

Perlindungan CSRF dan XSS untuk Keamanan Website yang Lebih Baik

Laravel secara otomatis menyediakan perlindungan terhadap serangan CSRF (Cross-Site Request Forgery) dan XSS (Cross-Site Scripting).

CSRF Protection:

Laravel menghasilkan token CSRF unik untuk setiap sesi pengguna. Token ini harus disertakan dalam setiap form yang dikirimkan ke server. Di dalam view Blade, Anda dapat menambahkan token CSRF menggunakan directive @csrf:

<form method="POST" action="{{ route('login') }}">
    @csrf
    ...
</form>

XSS Protection:

Secara default, Blade templating engine secara otomatis melakukan escaping terhadap data yang ditampilkan dari variabel. Ini membantu mencegah serangan XSS. Jika Anda ingin menampilkan data tanpa escaping (misalnya, kode HTML), Anda dapat menggunakan sintaks !! $variable !!, tetapi hati-hati karena ini dapat membuka celah XSS jika data tidak terpercaya. Sebaiknya hindari penggunaan sintaks ini kecuali jika Anda yakin data tersebut aman.

Middleware untuk Proteksi Route dan Otorisasi Pengguna

Middleware memungkinkan Anda untuk memfilter HTTP request yang masuk ke aplikasi Anda. Anda dapat menggunakan middleware untuk memproteksi route tertentu dan memastikan hanya pengguna yang terautentikasi yang dapat mengaksesnya.

Langkah 1: Menggunakan Middleware auth

Laravel sudah menyediakan middleware auth yang memeriksa apakah pengguna sudah terautentikasi. Anda dapat menerapkan middleware ini ke route tertentu menggunakan method middleware():

Route::get('/home', 'HomeController@index')->name('home')->middleware('auth');

Kode di atas memastikan bahwa hanya pengguna yang sudah login yang dapat mengakses route /home. Jika pengguna belum login, mereka akan diarahkan ke halaman login.

Langkah 2: Membuat Middleware Kustom (Opsional)

Anda juga dapat membuat middleware kustom untuk melakukan pengecekan otorisasi yang lebih kompleks. Misalnya, Anda dapat membuat middleware untuk memeriksa apakah pengguna memiliki peran atau izin tertentu sebelum mengizinkan akses ke route.

Untuk membuat middleware kustom, gunakan Artisan command:

php artisan make:middleware CheckRole

Ini akan membuat file middleware baru di app/Http/Middleware/CheckRole.php. Edit file ini untuk mengimplementasikan logika otorisasi Anda. Kemudian, daftarkan middleware di file app/Http/Kernel.php.

Uji Coba Sistem Login dan Register Anda

Setelah menerapkan semua langkah di atas, saatnya untuk menguji sistem login dan register Anda.

  1. Buka browser Anda dan kunjungi halaman /register.
  2. Isi formulir pendaftaran dengan data yang valid dan klik tombol “Register”.
  3. Anda seharusnya diarahkan ke halaman /home setelah berhasil mendaftar dan login.
  4. Coba logout dari aplikasi dan login kembali menggunakan kredensial yang sama.
  5. Pastikan semua fitur berfungsi dengan benar dan tidak ada error.
  6. Coba masukkan data yang tidak valid pada formulir pendaftaran dan login untuk memastikan validasi berfungsi dengan benar.

Meningkatkan Keamanan Lebih Lanjut

Meskipun Laravel menyediakan fitur keamanan yang kuat, ada beberapa langkah tambahan yang dapat Anda lakukan untuk meningkatkan keamanan website Anda lebih lanjut:

  • Gunakan HTTPS: Pastikan website Anda menggunakan HTTPS untuk mengenkripsi semua komunikasi antara browser dan server.
  • Konfigurasi CSP (Content Security Policy): CSP membantu mencegah serangan XSS dengan membatasi sumber daya yang diizinkan untuk dimuat oleh browser.
  • Monitor Log: Pantau log aplikasi Anda secara teratur untuk mendeteksi aktivitas yang mencurigakan.
  • Update Laravel secara Teratur: Pastikan Anda selalu menggunakan versi Laravel terbaru untuk mendapatkan patch keamanan terbaru.
  • Gunakan Library Keamanan Tambahan: Pertimbangkan untuk menggunakan library keamanan tambahan seperti OWASP ZAP untuk melakukan pengujian penetrasi dan mengidentifikasi kerentanan keamanan.
  • Implementasikan Rate Limiting: Batasi jumlah request yang dapat dilakukan oleh pengguna dalam jangka waktu tertentu untuk mencegah serangan brute-force.
  • Gunakan 2FA (Two-Factor Authentication): Implementasikan autentikasi dua faktor untuk lapisan keamanan tambahan.

Dengan mengikuti panduan ini dan menerapkan langkah-langkah keamanan yang disarankan, Anda dapat membuat sistem login dan register dengan Laravel Indonesia yang aman dan handal, serta menjamin keamanan website Anda dari berbagai ancaman. Selamat mencoba dan semoga sukses!

Tags: AuthenticationframeworkIndonesiaLaravelLoginPHPRegisterSecuritytutorialweb development
Elara Meadowlight

Elara Meadowlight

Related Posts

Akuntansi

Integrasi CRM dengan Sistem Akuntansi di Indonesia: Efisiensi Bisnis Tanpa Batas

by Lyra Silverbrook
December 6, 2025
AI

Cara Membuat Model AI dengan Tensorflow: Panduan Lengkap untuk Pemula

by Finnian Quickthorn
December 2, 2025
AI

AI untuk Prediksi Harga Saham di Indonesia: Analisis Data untuk Investasi Cerdas

by Jasper Nightshade
December 2, 2025
Next Post

Membuat Fitur Search dengan Laravel Indonesia: Pengalaman Pengguna Lebih Baik

Leave a Reply Cancel reply

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

Recommended

Contoh Website Company Profile Sederhana dengan HTML CSS: Inspirasi Desain Modern

July 30, 2025

Contoh Implementasi AI dalam Bisnis UKM: Studi Kasus dan Peluang Bisnis

June 20, 2025

Contoh Project Web Development Sederhana: Inspirasi dan Tutorial Lengkap

June 12, 2025

Cara Implementasi Authentication di Laravel: Keamanan Website Terjamin

August 1, 2025

Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan

June 5, 2026

Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda

June 5, 2026

Training CRM untuk Tim Sales dan Marketing: Tingkatkan Kompetensi dan Produktivitas

June 5, 2026

Harga Software CRM di Indonesia per Bulan: Perbandingan dan Pilihan Terbaik

June 5, 2026

tutwuri

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan
  • Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda
  • Training CRM untuk Tim Sales dan Marketing: Tingkatkan Kompetensi dan Produktivitas

Categories

  • AI
  • Akuntansi
  • Algoritma
  • Alternatif
  • Analisis
  • and separated by commas: Hosting
  • API
  • Aplikasi
  • Asuransi
  • Authentication
  • Backend
  • Bahasa Indonesia
  • Belajar
  • Berita
  • Biaya
  • Bisnis
  • Blog
  • Bootstrap
  • Branding
  • Bulanan
  • Business
  • Cepat
  • Chatbot
  • ChatGPT
  • Cloud
  • CMS
  • Command
  • Contoh
  • CPanel
  • CRM
  • CRUD
  • CSS
  • Data
  • Database
  • Debugging
  • Deployment
  • Desain
  • Design
  • Developer
  • Development
  • Digital
  • Dokumentasi
  • Domain
  • Download
  • Dukungan
  • E-commerce
  • Efektif
  • Efektivitas
  • Efisiensi
  • Email
  • Error
  • Error generating categories
  • Etika
  • Event
  • Excel
  • Fashion
  • File
  • Fitur
  • Fleksibilitas
  • Framework
  • Freelance
  • Frontend
  • Fungsional
  • Gambar
  • Game
  • Garansi
  • Generatif
  • Google
  • Gratis
  • Harga
  • Here are 5 categories
  • Here are 5 categories based on the article titles
  • Hosting
  • HTML
  • Ide
  • Implementasi
  • Indonesia
  • Industri
  • Inovasi
  • Inspirasi
  • Integrasi
  • Investasi
  • Jakarta
  • JavaScript
  • Kapasitas
  • Karir
  • Kasus
  • Keamanan
  • Keandalan
  • Keberhasilan
  • Kebutuhan
  • Kecepatan
  • Kepuasan
  • Kerugian
  • Kesehatan
  • Kinerja
  • Kolaborasi
  • Komunikasi
  • Komunitas
  • Konfigurasi
  • Konstruksi
  • Konten
  • Kota
  • Kreativitas
  • Kualitas
  • Kustomisasi
  • Laporan
  • Laravel
  • Layanan
  • Lokasi
  • Machine Learning
  • Mahasiswa
  • Manajemen
  • Manajemen Proyek
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Media Sosial
  • Migrasi
  • Migration
  • Mobile
  • Model
  • Monitoring
  • Murah
  • Negosiasi
  • Node JS
  • Online
  • Open Source
  • Optimasi
  • Otentikasi
  • Otomatis
  • Otomatisasi
  • Otomotif
  • Panduan
  • Pariwisata
  • Payment Gateway
  • Pekerjaan
  • Pelajar
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemasaran
  • Pemrograman
  • Pemula
  • Pendidikan
  • Pengambilan Keputusan
  • Pengembangan
  • Pengguna
  • Penggunaan
  • Penghasilan
  • Penipuan
  • Penjualan
  • Perbandingan
  • Perbedaan
  • Performa
  • Personalisasi
  • Pertumbuhan
  • Perubahan
  • PHP
  • Pilihan
  • Plugin
  • Portfolio
  • Prediksi
  • Produktivitas
  • Profesional
  • Programmer
  • Promo
  • Prospek
  • Python
  • Queue
  • Rekomendasi
  • Responsive
  • Retensi
  • Review
  • SEO
  • Sertifikat
  • Server
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • SSD
  • SSL
  • Stabilitas
  • Startup
  • Strategi
  • Syarat
  • Tanggung Jawab
  • Tantangan
  • Technology
  • Teknologi
  • Template
  • Terbaik
  • Terbaru
  • Terpercaya
  • Testimoni
  • Tips
  • Tools
  • Traffic
  • Trafik
  • Tren
  • Troubleshooting
  • Tutorial
  • UI
  • UKM
  • Unlimited
  • Upload
  • Uptime
  • using one word per category: Software
  • using only one word from the list provided per category
  • Validasi
  • Video
  • VPS
  • Web
  • Website
  • WordPress

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 tutwuri.

No Result
View All Result
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis

© 2024 tutwuri.