Senin, 18 Januari 2016

Laravel 5.2 - "Multiuser Login Authentication dan Router dengan Middleware"

Muqodimah

            Di dalam Laravel 5.2 terdapat fitur autentikasi yang digunakan untuk login/registrasi secara default sama seperti pada Laravel 5.1. Hanya dengan menggunakan perintah make:auth kita sudah mendapatkan view berupa form login dan registrasi. Namun untuk kebutuhan tertentu seperti membuat multi user kita bisa mengubah fitur autentifikasi tersebut sesuai keinginan.
            Selain itu di dalam Laravel terdapat fitur bawaan middleware yang digunakan untuk melakukan filter terhadap request yang masuk ke dalam sistem aplikasi. Hal ini dilakukan dengan tujuan untuk melakukan proses verifikasi terhadap setiap request yang masuk seperti misalnya melakukan pengecekan status login, privillage (hak akses), atau bahkan melakukan pengecekan token CSRF (Cross-Site Request Forgery) untuk memastikan bahwa request yang masuk berasal dari komputer atau user yang valid.
Dalam konteks Laravel, Middleware merupakan sebuah Class khusus yang berperan sebagai “penengah” antara request yang masuk dengan Controller yang dituju. Secara umum, prinsip kerja Middleware adalah mencegat request yang masuk untuk kemudian diproses terlebih dahulu sebelum diberikan kepada Controller yang dituju atau diarahkan ke Controller yang lain. Dengan menggunakan fitur ini, kita dapat membuat komponen yang reusable untuk melakukan pekerjaan-pekerjaan tersebut dan melindungi router terhadap user yang tidak memiliki hak akses tertentu.

Tujuan dari tulisan ini

  1. Membuat form register dan login yang akan digunakan oleh 2 pengguna : Admin dan User
  2. Memanfaatkan fungsi bawaaan Laravel untuk melakukan operasi register dan login
  3. Membuat middleware untuk melindungi router tertentu, contoh : “/admin”

Hal yang dibutuhkan

  1. Niat
  2. Komputer atau laptop J, yaa iyalah
  3. Laravel 5.2
  4. Web Server : MySql
  5. Texteditor
  6. Segelas kopi manis sebagai penambah gizi AJ

Langkah-langkah

  1. Pertama-tama jangan lupa berdoa dahulu kepada Allah SWT
  2. Buat database baru di Mysql dan atur koneksi laravel pada file *.env dan config/database.php sesuai dengan konfigurasi database yang anda buat
  3. Buat project baru di Laravel 5.2 (tentunya anda sudah bisa membuat project baru di Laravel). Setelah project baru, ketikkan php artisan make:auth, Buka browser akses pada localhost:8000
  4. Buka file migrasi xxxx_xx_xx_xxxxxx_create_users_table pada direktori C:\xampp\htdocs\nama_project\database\migrations untuk membuat tabel users, kita tinggal mengambahkan field baru yaitu: $table->boolean('admin')->default(0);
  5. Kemudian lakukan migrate agar tabel tersebut masuk ke dalam database dengan perintah migrate php artisan migrate, maka hasil tabel yang terbuat di dalam database.
  6. Sip, tabel sudah terbuat. Tabel tersebuat digunakan utnuk melakukan login oleh user yang sudah tedaftar atau ter-registrasi. Ada cara khusus yang digunakan dalam Laravel untuk menginputkan/insert data ke database yaitu dengan Seeder. Tapi kali ini kita tidak menggunakan Seeder untuk mengisi data ke database, karena kita juga akan membuat view untuk Register user baru. 
  7. Buka file register.blade.php pada direktori C:\xampp\htdocs\nama_project\resources\views\auth, kemudian edit/tambahkan dropdown untuk memilih hak akses user baru
    Note : dalam register yang dibuat terdapat 2 hak akses yaitu 1 untuk “admin” dan 0 untuk “user biasa”.
  8. Akses dengan url http://localhost:8000/register. dan jangan melakukan register dulu !!
  9. Buka model User.php kemudian tambahkan field “admin” pada protected fillable. Di Laravel 5.2, file tersebut terdapat di App\User.php 
    Buka file AuthController.php dan tambahkan parameter “admin” untuk menyimpan data ke database. File tersebut pada direktori C:\xampp\htdocs\nama_project\app\Http\Controllers\Auth. 
    Kemudian coba lakukan register user baru….Minimal register 2 user dengan 1 hak akses admin dan 1 hak akses User Biasa. Gimana? Error gak? A

  10. Oke, “perihal” registrasi sudah done…, kemudian buka localhost:8000/login dan lakukan login. 
    User yang telah sukses melakukan login akan redirect ke halaman home.
  11. Untuk membedakan home admin atau user setelah login maka kita buat dulu view-nya dengan cara copy-paste file home.blade.php yang ada pada C:\xampp\htdocs\nama_project\resources\views. Namai file tersebut dengan admin_home.blade.php dan user_home.blade.php
  12. Untuk file admin_home.blade.php edit sebagai berikut:
  13. Untuk file user_home.blade.php edit sebagai berikut
  14. Edit file app.blade.php baris 47 - 86

  15. Setelah yang kita lalui di atas, saatnya kita membuat middleware baru sebut saja dengan nama “IsAdmin”, middleware ini berfungsi untuk melindungi router yang hanya diakses oleh yang ber-hak akses admin (1). Jika router/URL yang menggunakan middleware “IsAdmin” diakses oleh user yang tidak ber-hak akses admin, maka langsung redirect ke halaman lain atau kita bisa menambahkan peringantan keras, hehehe. Langsung saja buat middlebaru tersebut php artisan make:middleware IsAdmin
  16. Lakukan beberapa custome di file IsAdmin.php untuk memeriksa apakah admin dan berikan langsung redirect ke halaman “/” atau peringatan jika diakses oleh user yang bukan admin.
    Setelah middleware jadi, jangan lupa untuk “mendaftarkannya” di dalam file Kernel.php yang tersimpan di dalam direktori C:\xampp\htdocs\ nama_project\app\Http
  17.   Kita lakukan edit pada routers.php sebagai berikut.
    Mekanisme dari coding di atas adalah middleware à kernel à router. Setelah membuat middleware (IsAdmin.php) kemudian mendaftarkannya di  kernel (Kernel.php) dan dipakai di router (Routers.php). Dalam router (Routers.php) terdapat beberapa middleware dijelaskan sebagai berikut:                                                   a) web : middleware default dari laravel 5.2 untuk memeriksa memeriksa Session CSRF, kernel HTTP, dll                                                                               b) auth : middleware default dari laravel yang digunakan untuk memeriksa akses url hanya untuk user yang sudah login (authentic).                                           c) admin : middleware baru yang digunakan untuk memeriksa akses url hanya untuk user yang login sebagai admin (1).                                                                Setelah melakukan login akan redirect ke “/” dimana url tersebut dilindungi oleh middleware web dan auth, kemudian memeriksa hak akses dan mengarahkannya ke halaman masing-masing sesuai hak akses user login. Kemudian url “admin” dilindungi oleh middleware admin, dimana kegunaan dari middleware tersebut adalah untuk membatasi akses url “admin” hanya boleh diakses oleh user login ber-hak akses admin (1)
  18. Ketika anda login sebagai admin
    dan mengakses URL/router “/admin”, yang terjadi adalah
  19. Saat login sebagai user, dan kemudian mencoba mengakses url ”localhost:8000/admin”, maka akan langsung redirect ke halaman “/”
  20. Alhamdulillah….begitulah cara membuat multi user authentication dan cara  mengcustome middleware untuk melindungi router. Anda bisa menambahkan sendiri sesuai dengan kebutuhan. Semoga bermanfaat J
  21. Tulisan ini disadur dari beberapa referensi dan modifikasi, jika ada salah dan kekurangan saya penulis mohon maaf sebesar-besarnya. Karena saya masih belajar dan hanya manusia “tempat-nya salah dan lupa”. Hehehe….Dan jika anda kurang paham dengan tulisan saya ini, silahkan mengkonsultasikan/menghubungi saya lewat kontak atau komentar dibawah sini. Matur suwun


Referensi

34 komentar:

  1. terimakasih
    sangat membentu, semoga ilmunya tambah bermanfaat

    BalasHapus
  2. terimakasih, sangat membantu dalam pembuatan tugas akhir
    di tunggu update selanjutnya :)

    BalasHapus
  3. kalau membuat 3 user 4 user caranya gimana ya??

    BalasHapus
    Balasan
    1. ya itu tinggal nambah hak akses di field "admin" tabel users.
      di tulisan saya itu kan 0 dan 1, tambah aja kode hak aksesnya (2/3/4/5)

      Hapus
    2. sip mas sudah bisa . yang saya bingungkan kemaren masalah deklarasi di routenya untuk user lebeh dari 2. tp ini sudah bisa.trimakasih

      Hapus
    3. gan punya ane nambah hak akses lebih dr 2 koq gakbisa ya

      Hapus
    4. bisa bantu saya membuatnya jika lebih dari 2 hak akses

      Hapus
  4. gan mau nanya dong,ane kan bikin seperti di atas,tapi tampilan log in nya kok eror ya..?
    apa tampilan log in nya juga harus di rubah..?
    tq

    BalasHapus
  5. maaf mas mau nanya,saya kan udah ikutin cara diatas dan berhasil cuman ketika register validasinya tdak muncul seperti password not matchnya,itu knpa ya ?

    BalasHapus
    Balasan
    1. [SOLVED] mas ternyata di routes.phpnya yg Route::auth(); jgn di dalam middleware group web hehe

      Hapus
    2. D tulis d luar jadi ya gan? Kyk awal bawaan laravel.
      Isi dari Route::groupnya jadi d ganti apa ya gan? Error kalo route::auth() nya d hilangkan.

      Hapus
    3. aku juga error distu, trus cara penulisan route yg benar itu seperti apa. Andri Gunawan

      Hapus
  6. Gan, mau tanya nih
    itu yg nmr 17 file name nya Routers.php atau Routes.php
    soalnya di dalam project saya cuma ada Routes.php

    BalasHapus
  7. Terimakasih.. artikelnya sangat membantu dan bermanfaat.. semoga makin sukses (y)

    BalasHapus
  8. Terima Kasih artikelnya, sangat membantu...
    kalau untuk akses register hanya bisa di akses Admin saja, dimana yang harus di rubah/ditambah?

    BalasHapus
  9. gan, mau tanya kenapa yang saya muncul error "undefined index: admin" padahal semua struktur file dan isinya sama..

    BalasHapus
  10. tanks gan... sangat membantu sekali... semoga berkah

    BalasHapus
  11. ditunggu artikel untuk laravel 5.3 nya gan :)

    BalasHapus
  12. mantapz gan,,,sangat membantu anak bangsa.

    BalasHapus
  13. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  14. saya saat loogout kenapa error routecollection ?

    BalasHapus
  15. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  16. routers.php itu tempatnya dimana ya?

    BalasHapus
    Balasan
    1. laravel berapa mba?

      Hapus
    2. https://stackoverflow.com/questions/39313536/missing-routes-php-file-in-new-laravel-project

      coba open link itu aja mba

      Hapus
  17. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  18. bantuannya dong min, setelah ikutin langkah diatas saya muncul error di authmanager.phpnya.
    baris ini min
    return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
    katanya "Illegal offset type" min, pencerahannya dong min

    BalasHapus
  19. thanks kk sangat-sangat membantu sekali

    BalasHapus
  20. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  21. Terima kasih mas.. ak dah coba, tapi masih ada kendala di bagian ini mas..

    ErrorException (E_ERROR)
    Trying to get property 'admin' of non-object (View: C:\xampp\htdocs\multiauth\resources\views\layouts\app.blade.php) (View: C:\xampp\htdocs\multiauth\resources\views\layouts\app.blade.php)

    ---- potongan kode ---
    <!-- Left Side Of Navbar -->
    <ul class="navbar-nav mr-auto">
    <li><a href="{{url('/')}}">Home</a></li>
    <!-- menampilkan apa bila admin -->
    @if (Auth::user()->admin == 1)
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Master <span class="ceret"></span></a>
    <ul class="dropdown-menu" role="menu">
    <li><a href="#">Data</a></li>
    <li><a href="#">Warehouse</a></li>
    </ul>
    @endif
    </ul>
    ----------------------


    mohon pencerahan mas

    BalasHapus
  22. Untuk laravel versi 5.8 bisa mas? Apa ada tambahan lagi?

    BalasHapus
  23. Mohon bantuannya yaa.. Soalnya saya lagi ngerjain projek sekolah :)) saya masih pemula bgt

    BalasHapus