Skip to content Skip to sidebar Skip to footer

Membuat Login Multi User Secara Manual di Laravel

Membuat Login Multi User Secara Manual di Laravel
Beberapa hari yang lalu saya mengalami kesulitan untuk membuat sebuah login di laravel. Kesulitan tersebut terjadi karena saya masih belum paham untuk membuatnya.

Setelah ada beberapa pencerahan dari internet dan juga teman akhirnya saya bisa membuat sebuah multi login laravel.

Pada awalnya saya berfikir untuk membuatnya secara manual dengan variabel global $_SESSION akan tetapi tidak bisa karena terbentur dengan session yang ada di sistem laravel.

Seperti kita tahu sistem view laravel menggunakan blade template jadi tidak mudah mendifinisikan $_SESSION secara manual.

Lalu apa yang saya lakukan untuk membuat login tersebut.

Sebelum itu saya akan menunjukkan tabel user saya, seperti ini
Membuat Login Multi User Secara Manual di Laravel
Manajamen user menjadi satu tabel saja dari sistem yang saya buat, tapi kalau kamu membuat di berbeda tabel juga tidak masalah tinggal menyesuaikan saja.

Baik langsung saja kita lanjut :

1. Ketik di cmd.


php artisan make:auth

2. Kita tidak akan menggunakan Folder Auth Tersebut tapi kita akan membuatnya secara manual jadi kita buat Controller sendiri yang diberi nama AuthController.php.
Membuat Login Multi User Secara Manual di Laravel
Isi dari controller tersebut seperti berikut :


<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Input; //untuk input::get
use Illuminate\Support\Facades\Auth;

use Redirect; //untuk redirect


use App\Mahasiswa;
use Illuminate\Http\Request;
use App\User;
use DB;

class AuthController extends Controller
{
    public function login()
    {
    	return view('auth.login2')->with('sukses','Anda Berhasil Login');
    }

    public function postlogin(Request $request)
    {
      // echo "$request->email.$request->password "; die;
    	if(Auth::attempt($request->only('email','password'))){
            $akun = DB::table('users')->where('email', $request->email)->first();
            //dd($akun);
            if($akun->role =='Administrator'){
                Auth::guard('Administrator')->LoginUsingId($akun->id);
                return redirect('/admin')->with('sukses','Anda Berhasil Login');
            } else if($akun->role =='Kepala Laboratorium'){
                Auth::guard('kalab')->LoginUsingId($akun->id);
                return redirect('/berandakalab')->with('sukses','Anda Berhasil Login');
            }elseif ($akun->role =='Dosen') {
              Auth::guard('dosen')->LoginUsingId($akun->id);
              return redirect('/berandadosen')->with('sukses','Anda Berhasil Login');
            }elseif ($akun->role =='Asisten Laboratorium') {
              Auth::guard('aslab')->LoginUsingId($akun->id);
              return redirect('/berandaaslab')->with('sukses','Anda Berhasil Login');
            }elseif ($akun->role =='Asisten Praktikum') {
              Auth::guard('asprak')->LoginUsingId($akun->id);
              return redirect('/berandasprak')->with('sukses','Anda Berhasil Login');
            }elseif ($akun->role =='Praktikan') {
              Auth::guard('praktikan')->LoginUsingId($akun->id);
              return redirect('/berandapraktikan')->with('sukses','Anda Berhasil Login');
            }
    	}
    	return redirect('/login')->with('error','Akun Belum Terdaftar');
    }

    public function logout()
    {
        if(Auth::guard('Administrator')->check()){
            Auth::guard('Administrator')->logout();
        } else if(Auth::guard('kalab')->check()){
            Auth::guard('kalab')->logout();
        } else if(Auth::guard('dosen')->check()){
            Auth::guard('dosen')->logout();
        } else if(Auth::guard('aslab')->check()){
            Auth::guard('aslab')->logout();
        } else if(Auth::guard('asprak')->check()){
            Auth::guard('asprak')->logout();
        } else if(Auth::guard('praktikan')->check()){
            Auth::guard('praktikan')->logout();
        }
    	return redirect('login')->with('sukses','Anda Telah Logout');
    }


}

Controller tersebut sudah satu paket antara menampilkan halaman login, proses login dan logout.

3. Buat routenya di web.php seperti ini untuk mengarahkan ke controlller tersebut.


Route::get('/login', 'AuthController@login')->name('login');
Route::post('/login2', 'AuthController@postlogin')->name('login2');
Route::get('/logout', 'AuthController@logout')->name('logout');

Jangan lupa memberi komentar pada Auth::routes(); seperti ini // Auth::routes(); agar tidak bertabrakan.

4. Buat view untuk login tersebut

Buatkan view login baru seperti berikut:


<!DOCTYPE html>
<html lang="en">

<head>

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">

  <title>Sistem Informasi Laboratorium</title>

  <!-- Custom fonts for this template-->
  <link href="{{asset('assets/vendor/fontawesome-free/css/all.min.css')}}" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

  <!-- Custom styles for this template-->
  <link href="{{asset('assets/css/sb-admin-2.min.css')}}" rel="stylesheet">
  <link href="{{asset('assets/vendor/datatables/dataTables.bootstrap4.min.css')}}" rel="stylesheet">
</head>

<body class="bg-gradient-primary">

  <div class="container">

    <!-- Outer Row -->
    <div class="row justify-content-center">

      <div class="col-xl-6 col-lg-6 col-md-6">

        <div class="card o-hidden border-0 shadow-lg my-5">
          <div class="card-body p-0">
            <!-- Nested Row within Card Body -->
            <div class="row">
              <div class="col-lg-12 d-none "></div>
              <div class="col-lg-12">
                <div class="p-5">
                  <div class="text-center">
                    <h1 class="h4 text-gray-900 mb-4">Akses dashboard</h1>
                  </div>
                  <form class="user" action="{{route('login2')}}" method="post">
                    @csrf
                    <div class="form-group">
                      <input type="email" name="email" class="form-control form-control-user" id="exampleInputEmail" aria-describedby="emailHelp" placeholder="Masukkan Alamat Email..">
                    </div>
                    <div class="form-group">
                      <input type="password" name="password" class="form-control form-control-user" id="exampleInputPassword" placeholder="Masukkan Kata Sandi..">
                    </div>
                    <!-- <div class="form-group">
                      <div class="custom-control custom-checkbox small">
                        <input type="checkbox" class="custom-control-input" id="customCheck">
                        <label class="custom-control-label" for="customCheck">Remember Me</label>
                      </div>
                    </div> -->
                    <button type="submit" name="button" class="btn btn-primary btn-user btn-block" >Login</button>
                    <!-- <a href="index.html" class="btn btn-primary btn-user btn-block">

                      Login
                    </a> -->
                    <!-- <hr> -->
                  </form>
                  <!-- <hr> -->
                  <!-- <div class="text-center">
                    <a class="small" href="forgot-password.html">Forgot Password?</a>
                  </div>
                  <div class="text-center">
                    <a class="small" href="register.html">Create an Account!</a>
                  </div> -->
                </div>
              </div>
            </div>
          </div>
        </div>

      </div>

    </div>

  </div>

  <script src="{{asset('assets/vendor/jquery/jquery.min.js')}}"></script>
  <script src="{{asset('assets/vendor/bootstrap/js/bootstrap.bundle.min.js')}}"></script>

  <!-- Core plugin JavaScript-->
  <script src="{{asset('assets/vendor/jquery-easing/jquery.easing.min.js')}}"></script>

  <!-- Custom scripts for all pages-->
  <script src="{{asset('assets/js/sb-admin-2.min.js')}}"></script>

  <!-- Page level plugins -->
  <script src="{{asset('assets/vendor/datatables/jquery.dataTables.min.js')}}"></script>
  <script src="{{asset('assets/vendor/datatables/dataTables.bootstrap4.min.js')}}"></script>

  <!-- Page level custom scripts -->
  <script src="{{asset('assets/js/demo/datatables-demo.js')}}"></script>

</body>

</html>

Untuk view login saya menggunakan SB Admin 2 bisa di dapatkan berikut ini https://startbootstrap.com/themes/sb-admin-2/.

5. Buatkan guard di config/auth.php
Membuat Login Multi User Secara Manual di Laravel
Di dalam auth kita tambahkan guard dan providernya

Berikut ini guardnya:

  'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'Administrator' => [
            'driver' => 'session',
            'provider' => 'Administrator',
        ],

        'apiadmininistrator' => [
            'driver' => 'token',
            'provider' => 'admin',
        ],

        'kalab' => [
            'driver' => 'session',
            'provider' => 'kalab',
        ],

        'apikalab' => [
          'driver' => 'token',
          'provider' => 'kalab',
        ],

        'dosen' => [
            'driver' => 'session',
            'provider' => 'dosen',
        ],

        'apidosen' => [
          'driver' => 'token',
          'provider' => 'dosen',
        ],

        'aslab' => [
          'driver' => 'session',
          'provider' => 'aslab',
        ],

        'apiaslab' => [
          'driver' => 'token',
          'provider' => 'aslab',
        ],

        'asprak' => [
          'driver' => 'session',
          'provider' => 'asprak',
        ],

        'apiasprak' => [
          'driver' => 'token',
          'provider' => 'asprak',
        ],

        'praktikan' => [
          'driver' => 'session',
          'provider' => 'praktikan',
        ],

        'apipraktikan' => [
          'driver' => 'token',
          'provider' => 'praktikan',
        ],

    ],

Berikut ini providernya:

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'Administrator' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'kalab' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'dosen' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'aslab' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'asprak' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'praktikan' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
    ],


Setelah sudah berhasil di pasang semua maka semua sudah siap untuk di coba, silahkan di coba.

Jika ada masalah beri komentar di bawah ini atau bisa minta bantuan lewat email saya. 

Terimakasih sudah melihat tutorialnya, good luck!.

Dokumentasi Authentication laravel bisa di baca berikut ini:
https://laravel.com/docs/5.8/authentication

8 comments for "Membuat Login Multi User Secara Manual di Laravel"

  1. Replies
    1. Tidak ada model mahasiswa, mahasiswa di dalam tutorial dibagi menjadi aslab, asprak, dan praktikan.

      Delete
  2. controller yg lain ga dijelasinnya? apa bisa cuman dari auth controller?

    ReplyDelete
    Replies
    1. point saya disini kan menjelaskan bagaimana membuat multiuser, jadi yang saya utamakan adalah controller bagian untuk autentikasi multiuser, jika kamu ingin menambahkannya pada controller lain juga bisa

      Delete
  3. min, ini kenapa ya pas login gitu redirectnya ke halaman login lagi, ga masuk ke halaman dashboardnya gitu

    ReplyDelete
    Replies
    1. username dan passwordnya sudah cocok belum sama databasenya

      Delete
  4. mau nanya, ini kok saya balik lagi ke form login ya sedangkan uname dan pass nya sesuai dengan database

    ReplyDelete
    Replies
    1. coba dicek lagi pengaturannya, terutama di guard

      Delete