Dimisalkan user login sebagai admin. User pertama kali akan mengakses route login terlebih dahulu, untuk pengisian form login. Setelah user mensubmit pada form login, maka terjadilah autentikasi. Sistem akan mengecek level user, jika level admin, maka akan redirect ke dahsboard admin, jika level editor maka akan redirect ke dashboard editor, Ketika proses redirect terjadi pengecekan pada routes, sistem akan validasi apakah benar-benar sudah login atau belum, jika sudah maka akan menseleksi kedua yaitu dicek lagi apakah url yang dituju itu sama dengan level yang dimiliki. Pada contohnya user sebagai admin, maka otomatis akan menuju ke route url admin, jika user iseng membuka url editor, maka sistem akan menolak, karena tidak sesuai dengan level akun usernya.
Layouting
Pada tahap akhir ini kita akan membuat layout sederhana, Kita akan membuat layout halaman login dan dashboard admin / editor
Layout halaman Login Silahkan buat file bernama login.blade.php didalam folder resources/views/
Layout halaman Dashboard Silahkan buat file bernama dashboard.blade.php didalam folder resources/views/
Loh kok cuman 1 template aja buat dashboardnya?
yap, disini saya hanya buat 1, didalam layout tersebut sudah saya bedakan mana level admin, dan mana level editor.
{{ Auth::user()->level }}
Finally
Jalankan server laravel dengan perintah
php artisan serve
Silahkan eksplorasi dari proyek ini.
Oke, cukup sekian dari tutorial membuat Custom Authentication Login pada Laravel 8. Semoga bermanfaat.
Wassalamualaikum Warahmatullahi Wabarakatuh. File project bisa dilihat disini
Video penjelasan lengkap dari awal hingga akhir
Apabila tutorial diatas membantu kamu dalam belajar, dan jika kamu memiliki sedikit rezeki, mohon dukungannya dalam bentuk segelas kopi melalui URL dibawah ini:
Pada tutorial kali ini saya akan membuat custom auth sendiri menggunakan framework laravel.
Laravel auth adalah fitur esensial yang pasti ada di setiap aplikasi dan website yang dibuat memakai framework Laravel.
Auth amat penting sebab memungkinkan user untuk melakukan verifikasi email, login akun, reset password dan lain sebagainya pada website maupun aplikasi.
Langsung saja kita mulai tutorial untuk membuat fitur custom authentication menggunakan laravel.
Memulai Project
pertama kita akan membuat project laravel menggunakan perintah composer dengan command dibawah:
composer create-project laravel/laravel sipus
Konfigurasi Database
selanjutnya, kita akan membuat database pada phpmyadmin dengan nama database laravel_custom_auth
lalu , kita setting konfigurasi pada file .env laravel seperti dibawah:
selanjutnya, kita akan menambahkan kolom pada tabel user dengan membuka file 2014_10_12_000000_create_users_table .php pada folder database/migrations seperti dibawah:
Kita menambahkan field username untuk menampung username dari user
Kita menambahkan field level , untuk memberikan level pada akun tersebut. Contoh level yaitu admin,manager , user, dll
Selanjutnya kita akan melakukan migrate untuk membuat table user dengan melakukan perintah dibawah :
php artisan migrate
Edit Pada Model User
selanjutnya kita edit data pada variabel $fillable pada file App/Models/Users.php seperti contoh dibawah :
protected$fillable = [ 'name', 'email', 'username', // field baru 'level', // field baru 'password', ];
Membuat Seeder
selanjutnya kita akan membuat data fake user dengan menggunakan fitur seeder sebagai sample data user untuk proses login akun. Jalankan perintah make:seeder seperti dibawah:
php artisan make:seeder AkunSeeder
Tambahkan code dibawah ini , letakkan dalam function run() seperti contoh dibawah :
jalankan perintah db:seed untuk class AkunSeeder agar kita dapat generate data yang sudah kita buat seperti contoh dibawah:
php artisan db:seed --class=AkunSeeder
Hasil dari perintah diatas yaitu …
Membuat Middleware
Middleware menjadi salah satu fitur yang sangat penting pada Laravel. Dengan Middleware kita dapat mengontrol dan memodifikasi permintaan HTTP setelah ataupun sebelum permintaan tersebut diproses oleh aplikasi Laravel kita.
Fungsi yang akan kita lakukan dengan menggunakan middlewae yaitu :
Jadi semisal kita login sebagai admin, ketika login sukses sistem akan mengarahkan ke dashboard admin.
Nah sebelum membuka dashboard admin, sistem akan mencek yang login ini apakah bener admin atau bukan.
Jika bukan admin, maka sistem akan redirect ke halaman login lagi.
Kita buat middleware dengan perintah pada cmd
php artisan make:middleware Cek_login
cek didalam folder app/Http/Middleware apakah sudah ada file bernama Cek_login.php
Jika sudah ada, silahkan tambahkan kode dibawah ini, letakkan di function handle()
classCek_login { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ publicfunctionhandle(Request $request, Closure$next, $roles): Response { // cek sudah login atau belum . jika belum kembali ke halaman login if(!Auth::check()){ returnredirect('login'); } // simpan data user pada variabel $user $user = Auth::user();
// jika user memiliki level sesuai pada kolom pada lanjutkan request if($user->level == $roles){ return$next($request); }
// jika tidak memiliki akses maka kembalikan ke halaman login returnredirect('login')->with('error','Maaf anda tidak memiliki akses'); } }
Ketika sudah membuat middleware, kita harus registrasikan pada kernel.php . Agar middleware dapat dibaca oleh sistem.
Buka folder App/Http/Kernel.php dan tambahkan code pada variabel $middlewareAliases seperti dibawah .
Pada langkah ini kita akan membuat controller auth, yang dimana di dalamnya terdapat proses authentikasi dari request login.
Selain itu juga di controller ini memuat redirect view halaman login dan proses logout.
Jalankan perintah make:controller
php artisan make:controller AuthController
Buka file App/Http/Controllers/AuthController.php yang sudah kita buat. Lalu kita akan isi perintah code untuk membuat proses authentikasi , verifikasi, dan logout.
Berikut contoh kode program pada AuthController.php yaitu …
publicfunctionindex(){ // kita ambil data user lalu simpan pada variable $user $user = Auth::user(); // kondisi jika user nya ada if($user){ // jika user nya memiliki level admin if($user->level =='admin'){ // arahkan ke halaman admin ya :P returnredirect()->intended('admin'); } // jika user nya memiliki level user elseif($user->level =='user'){ // arahkan ke halaman user returnredirect()->intended('user'); }
} returnview('login'); } // publicfunctionproses_login(Request $request){ // kita buat validasi pada saat tombol login di klik // validas nya username & password wajib di isi $request->validate([ 'username'=>'required', 'password'=>'required' ]);
// ambil data request username & password saja $credential = $request->only('username','password');
// cek jika data username dan password valid (sesuai) dengan data if(Auth::attempt($credential)){ // kalau berhasil simpan data user ya di variabel $user $user = Auth::user(); // cek lagi jika level user admin maka arahkan ke halaman admin if($user->level =='admin'){ returnredirect()->intended('admin');
} // tapi jika level user nya user biasa maka arahkan ke halaman user elseif($user->level =='user'){ returnredirect()->intended('user'); } // jika belum ada role maka ke halaman / returnredirect()->intended('/'); }
// jika ga ada data user yang valid maka kembalikan lagi ke halaman login // pastikan kirim pesan error juga kalau login gagal ya returnredirect('login') ->withInput() ->withErrors(['login_gagal'=>'These credentials does not match our records']);
// aksi form register publicfunctionproses_register(Request $request){ //. kita buat validasi nih buat proses register // validasinya yaitu semua field wajib di isi // validasi username itu harus unique atau tidak boleh duplicate username ya $validator = Validator::make($request->all(),[ 'name'=>'required', 'username'=>'required|unique:users', 'email'=>'required|email', 'password'=>'required' ]);
// kalau gagal kembali ke halaman register dengan munculkan pesan error if($validator ->fails()){ returnredirect('/register') ->withErrors($validator) ->withInput(); } // kalau berhasil isi level & hash passwordnya ya biar secure $request['level']='user'; $request['password'] = bcrypt($request->password);
// masukkan semua data pada request ke table user User::create($request->all());
// kalo berhasil arahkan ke halaman login returnredirect()->route('login'); }
publicfunctionlogout(Request $request){ // logout itu harus menghapus session nya
$request->session()->flush();
// jalan kan juga fungsi logout pada auth
Auth::logout(); // kembali kan ke halaman login returnRedirect('login'); } }
Penjelasan tentang route auth:
Dimisalkan user login sebagai admin.
User pertama kali akan mengakses route login terlebih dahulu, untuk pengisian form login.
Setelah user mensubmit pada form login, maka terjadilah autentikasi.
Sistem akan mengecek level user, jika level admin, maka akan redirect ke dahsboard admin, jika level user maka akan redirect ke dashboard user,
Ketika proses redirect terjadi pengecekan pada routes, sistem akan validasi apakah benar-benar sudah login atau belum, jika sudah maka akan menseleksi kedua yaitu dicek lagi apakah url yang dituju itu sama dengan level yang dimiliki.
Pada contohnya user sebagai admin, maka otomatis akan menuju ke route url admin,
jika user iseng membuka url admin, maka sistem akan menolak, karena tidak sesuai dengan level akun usernya.
Layouting
Pada tahap akhir ini kita akan membuat layout sederhana, Kita akan membuat layout halaman login dan dashboard admin / user
Membuat Layout Silahkan buat file bernama layout.blade.php didalam folder resources/views/
lalu isi file tersebut dengan kode program dibawah :
Selanjutnya kita akan membuat layout register pada folder resources/views dengan nama file register.blade.php. Isi file pada halaman register seperti pada kode program dibawah:
Selanjutnya kita akan membuat layout dashboard pada folder resources/views dengan nama file dashboard.blade.php. Isi file pada halaman dashboard seperti kode program dibawah
Untuk asset gambar yang kita gunakan , kalian bisa ambil dan download gambar png di https://www.pngwing.com/en/search?q=library lalu letakkan filenya pada folder public/image seperti contoh dibawah.
Notes:
Folder image harus kalian buat sendiri 😐
Routes
Routing merupakan penghubung antara request user dengan controller. Semua fungsi yang kita buat pada controller tidak akan bisa dipanggil jika tidak di daftarkan pada routing. Untuk itu kita akan menambahkan daftar routes pada file routes/web.php seperti kode program dibawah
/* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider and all of them will | be assigned to the "web" middleware group. Make something great! | */
// Route::get('/', function () { // return view('welcome'); // });
// metode nya get lalu masukkan namespace AuthController // attribute name merupakan penamaan dari route yang kita buat // kita tinggal panggil fungsi route(name) pada layout atau controller Route::get('login', [AuthController::class,'index'])->name('login'); Route::get('register', [AuthController::class,'register'])->name('register'); Route::post('proses_login', [AuthController::class,'proses_login'])->name('proses_login'); Route::get('logout', [AuthController::class,'logout'])->name('logout');
// kita atur juga untuk middleware menggunakan group pada routing // didalamnya terdapat group untuk mengecek kondisi login // jika user yang login merupakan admin maka akan diarahkan ke AdminController // jika user yang login merupakan user biasa maka akan diarahkan ke UserController Route::group(['middleware' => ['auth']], function () { Route::group(['middleware' => ['cek_login:admin']], function () { Route::resource('admin', AdminController::class); }); Route::group(['middleware' => ['cek_login:user']], function () { Route::resource('user', UserController::class); }); });
AdminController
Buat lah file controller dengan nama AdminController sebagai halaman yang boleh diakses oleh admin saja. Jalankan perintah dibawah:
php artisan make:controller AdminController
Buka folder App/Http/Controllers dan isi file AdminController seperti dibawah
Buat lah file controller dengan nama AdminController sebagai halaman yang boleh diakses oleh admin saja. Jalankan perintah dibawah:
php artisan make:controller UserController
Buka folder App/Http/Controllers dan isi file UserController seperti dibawah
namespace App\Http\Controllers;use Illuminate\Http\Request;class UserController extends Controller { // public function index(){ return view('dashboard'); } }
Yeeay semua proses yang kita buat sudah selesai 😾.
Sekarang saatnya kita coba !!
Lalu untuk jalankan server pada laravel lakukan dengan perintah
php artisan serve
Output:
AkunSeeder
Login
Login dengan kondisi gagal
Dashboard Sebagai Admin
Simulasi video bisa di tonton di sini yaa …
Tugas
Buatlah login dengan role manager lalu arahkan ke halaman dashboard sebagai manager & executive!!
Kumpulkan dalam bentuk source code dan screenshoot seperti contoh diatas harus lengkap ya.
Notes:
Yang tidak mengumpulkan progress tugas nya pada hari rabu di jam 15.40 maka minggu depan akan di minta untuk presentasikan authentikasi berdasarkan pemahamannya .