2 min read

Kustom Login Laravel 5.3

Salah satu fitur yang hampir pasti ada di aplikasi adalah fitur login, sederhananya fitur login ini sebagai pembatas mengenai hak akses terhadap suatu fungsi. Di laravel sendiri sudah sangat dimudahkan dalam pembuatan fitur login ini, cukup gunakan perintah artisan seperti berikut :

php artisan make:auth

Perintah tersebut setidaknya menghasilkan beberapa hal.

  1. Koleksi Controller auth yang berada di app/Http/Controller/Auth/
  2. Koleksi View yang berada di resources/views/auth/
  3. HomeController sebagai tujuan setelah login.

Karena tulisan ini berfokus di kustom login maka berkas yang perlu diperhatikan adalah berkas ini : app/Http/Controller/Auth/LoginController.php. Sedangkan isi default dari berkas tersebut adalah sebagai berikut :

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }
}

Kustom 1 : Mengganti Route Setelah Login

Biasanya setelah berhasil login akan diarahkan ke route baru, misalnya arsmp.com/home dan untuk mengatur itu cukup mudah, cukup ubah nilai variabel $redirecTo

protected $redirectTo = '/new-home';

Setelah diubah variabel tersebut menyebabkan route yang ditujua bukan lagi ‘home’ tapi ‘new-home’.

Kustom 2 : Mengubah Logika Login

Misalnya user yang login itu yang statusnya aktif selain itu akan dianggap gagal login, untuk itu ada beberapa tahapan yang perlu dilakukan.

Tambah Namespace Baru dan override fungsi Login()

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

Setelah menambah namespace baru tambahkan satu fungsi dengan nama login() yang isinya seperti berikut :

public function login(Request $request)
    {
        $email      = $request->get('email'); //mengambil nilai email dari form login
        $password   = $request->get('password'); //mengambil password dari form login
        $remember   = $request->get('remember'); // mengambil nilai remember me diisi
        //mencoba lgin dengan fungsi Auth::attempt()
          if (Auth::attempt([
                        'email'     => $email,
                        'password'  => $password,
                        'active'    =>1 //cek apakah field active bernilai 1
                    ], $remember == 1 ? true : false)) {
            return $this->sendLoginResponse($request); //return ke halaman setelah login
          }else{
          //jika gagal kembali ke halaman login
            return redirect()->back()
            ->withInput($request->only("email", 'remember'))
            ->withErrors([
                    "email" => "User tidak ditemukan",
            ]);
          }
    }

Sehingga keseluruhan LoginController adalah seperti berikut :

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

    public function login(Request $request)
    {
        $email      = $request->get('email');
        $password   = $request->get('password');
        $remember   = $request->get('remember');
          if (Auth::attempt([
                        'email'     => $email,
                        'password'  => $password,
                        'active'    =>1
                    ], $remember == 1 ? true : false)) {
            return $this->sendLoginResponse($request);
          }else{
            return redirect()->back()
            ->withInput($request->only("email", 'remember'))
            ->withErrors([
                    "email" => "User tidak ditemukan",
            ]);
          }
    }
    
}

Kesimpulan :

Dengan kita mengatur logika sendiri dari login, kita jauh lebih fleksibel dalam menentukan kondisi orang-orang yang login, biasanya selain mengecek orang user tersebut aktif atau tidak kode di atas saya uabh untuk pengecekan role misalnya, jadi kalau role-nya “admin” maka diarahkannya ke ‘AdminDashboard’, kalau “user” ke ‘home’.

Sedangkan untuk mengetahui fungsi yang bisa di-override bisa dicek di /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php.