Jumat, 23 Februari 2024

LARAVEL 10-form login

 

Custom Authentication Login pada Laravel 9 / 10

https://afrizalmy.com/custom-auth-laravel-8


Custom auth disini saya akan membuat auth sendiri, dengan mengikuti dokumentasi ini, saya bisa menyesuaikan sistem auth sesuai kebutuhan.

Oke langsung saja kita mempraktekkanya.

 

Update 2Jan2022

Support Laravel 9.x

Jika kurang memahami dalam bentuk teks, silahkan scroll bawah untuk melihat versi video via Youtube.

 

Update 15Feb2023

Support Laravel 10.x

 

Menginstal laravel

Pertama kita akan membuat project baru laravel tentunya, bisa dengan perintah composer create-project

composer create-project --prefer-dist laravel/laravel custom_auth

Atau menggunakan Laravel Installer

laravel new custom_auth

 

Konfigurasi Database

Selanjutnya buat database, contoh kali ini kita berikan nama databasenya yaitu laravel_custom_auth .

Lalu ubah konfiguras pada file .env, untuk username, password, host ,port sesuaikan dengan konfigurasi pada device kalian masing-masing

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_custom_auth
DB_USERNAME=root
DB_PASSWORD=

 

Membuat Migration

Dalam contoh kasus ini, saya hanya mengubah pada tabel users , jika kalian ingin menambahkan tabel baru silahkan.

Kita tambahkan 2 field/kolom dengan nama username dan level.

Sehingga codenya seperti berikut

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('username')->unique(); // baru
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->string('level'); // baru
            $table->rememberToken();
            $table->timestamps();
        });
    }

Field username, buat menampung data username dari user.

Field level, buat memberikan level pada akun user tersebut. Contohnya; admin, editor, dll.

Lalu, jangan lupa untuk migrate ke database

php artisan migrate

 

Edit Pada Models

Ketika kalian telah berhasil membuat tabel pada langkah sebelumnya, selanjutnya kalian ubah pada modelsnya.

Dalam case ini karena saya menggunakan tabel users, maka saya hanya ubah pada models users.

Edit sesuai tabel yang kalian buat pada langkah sebelumnya ya.

Tambahkan 2 field di dalam array fillable , yaitu username dan level, sehingga codenya seperti berikut;

protected $fillable = [
        'name',
        'username', //baru
        'level', //baru'
        'email',
        'password',
    ];

 

Membuat Seeder

Kita akan membuat seeder setelah migrate database, agar kita punya sampel data untuk proses loginnya.

Jalankan perintah make:seeder

php artisan make:seeder AkunSeeder

Cek difolder database/seeder apakah filenya sudah berhasil terbuat.

Tambahkan code dibawah ini, letakkan didalam function run()

public function run()
    {
        $user = [
            [
                'username' => 'admin',
               'name'=>'ini akun Admin',
               'email'=>'admin@example.com',
                'level'=>'admin',
               'password'=> bcrypt('123456'),
            ],
            [
                'username' => 'user',
               'name'=>'ini akun User (non admin)',
               'email'=>'user@example.com',
                'level'=>'editor',
               'password'=> bcrypt('123456'),
            ],
        ];

        foreach ($user as $key => $value) {
            User::create($value);
        }
    }

jangan lupa kita panggil juga models usernya yaa

use App\Models\User;

 

Membuat Middleware

Selanjutnya kita akan membuat middleware, karena middleware ini akan mencek setiap route.

Jadi semisal kita login sebagai admin, kerika 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

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()

public function handle(Request $request, Closure $next, $roles)
    {
        if (!Auth::check()) {
            return redirect('login');
        }
        $user = Auth::user();

        if($user->level == $roles)
            return $next($request);


        return redirect('login')->with('error',"kamu gak punya akses");
    }

Jangan lupa panggil Facades Auth

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; // baru

ketika sudah membuat middleware, setelah itu jangan lupa untuk meregristrasikan ke kernel.php

Agar middleware kamu bisa terbaca oleh sistem.

Buka di folder app/Http/Kernel.php

Tambahkan code dibawah ini didalam routeMiddleware

protected $routeMiddleware = [
        ...
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'cek_login' => \App\Http\Middleware\Cek_login::class // baru
    ];

 

Membuat Controller Auth

Pada step ini kita akan membuat controller auth, yang dimana didalamnya 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

Berikut kode dari controller auth

level == 'admin') {
                return redirect()->intended('admin');
            } elseif ($user->level == 'editor') {
                return redirect()->intended('editor');
            }
        }
        return view('login');
    }

    public function proses_login(Request $request)
    {
        request()->validate(
            [
                'username' => 'required',
                'password' => 'required',
            ]);

        $kredensil = $request->only('username','password');

            if (Auth::attempt($kredensil)) {
                $user = Auth::user();
                if ($user->level == 'admin') {
                    return redirect()->intended('admin');
                } elseif ($user->level == 'editor') {
                    return redirect()->intended('editor');
                }
                return redirect()->intended('/');
            }

        return redirect('login')
                                ->withInput()
                                ->withErrors(['login_gagal' => 'These credentials do not match our records.']);
    }

    public function logout(Request $request)
    {
       $request->session()->flush();
       Auth::logout();
       return Redirect('login');
    }
}

 

Ubah Pada Routes

Setelah kita berhasil membuat auth controller, selanjutnya kita akan mengubah pada routes pada sistem kita.

Berikut adalah kode dari routes/web.php

name('login');
// Route::get('register', 'App\Http\Controllers\AuthController@register')->name('register');
Route::post('proses_login', 'App\Http\Controllers\AuthController@proses_login')->name('proses_login');
Route::get('logout', 'App\Http\Controllers\AuthController@logout')->name('logout');

Route::group(['middleware' => ['auth']], function () {
    Route::group(['middleware' => ['cek_login:admin']], function () {
        Route::resource('admin', AdminController::class);
    });
    Route::group(['middleware' => ['cek_login:editor']], function () {
        Route::resource('editor', AdminController::class);
    });
});

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 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:

Tidak ada komentar:

Posting Komentar