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.
- Koleksi Controller auth yang berada di
app/Http/Controller/Auth/
- Koleksi View yang berada di
resources/views/auth/
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
.