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
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.
2. Kita tidak akan menggunakan Folder Auth Tersebut tapi kita akan membuatnya secara manual jadi kita buat Controller sendiri yang diberi nama AuthController.php.
Jangan lupa memberi komentar pada Auth::routes(); seperti ini // Auth::routes(); agar tidak bertabrakan.
4. Buat view untuk login tersebut
Berikut ini guardnya:
Berikut ini providernya:
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
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
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.
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
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
Dokumentasi Authentication laravel bisa di baca berikut ini:
https://laravel.com/docs/5.8/authentication
model mahasiswa nya mana??
ReplyDeleteTidak ada model mahasiswa, mahasiswa di dalam tutorial dibagi menjadi aslab, asprak, dan praktikan.
Deletecontroller yg lain ga dijelasinnya? apa bisa cuman dari auth controller?
ReplyDeletepoint 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
Deletemin, ini kenapa ya pas login gitu redirectnya ke halaman login lagi, ga masuk ke halaman dashboardnya gitu
ReplyDeleteusername dan passwordnya sudah cocok belum sama databasenya
Deletemau nanya, ini kok saya balik lagi ke form login ya sedangkan uname dan pass nya sesuai dengan database
ReplyDeletecoba dicek lagi pengaturannya, terutama di guard
Delete