From 631c86d8e6eeecc79fb2efe951bb49f7c034e1f7 Mon Sep 17 00:00:00 2001 From: Ananda Zakia S <117088186+zakiaass@users.noreply.github.com> Date: Mon, 25 Dec 2023 23:41:51 +0700 Subject: [PATCH] Update Auth --- app/Http/Controllers/AuthController.php | 164 ++- app/Models/User.php | 3 +- .../2014_10_12_000000_create_users_table.php | 4 +- public/src/styles/style.css | 14 +- .../views/auth/forgot-password.blade.php | 47 + resources/views/auth/login.blade.php | 130 +- resources/views/auth/register.blade.php | 73 + resources/views/auth/reset-password.blade.php | 61 + .../views/dashboard/data-kriteria.blade.php | 0 resources/views/dashboard/index.blade.php | 1 + resources/views/layout/main.blade.php | 91 ++ resources/views/layout/master.blade.php | 1222 +++++++---------- resources/views/layout/navbar.blade.php | 65 + resources/views/layout/page.blade.php | 40 + resources/views/layout/sidebar.blade.php | 75 + resources/views/siswa/dashboard.blade.php | 20 +- routes/web.php | 31 +- 17 files changed, 1234 insertions(+), 807 deletions(-) create mode 100644 resources/views/auth/forgot-password.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/reset-password.blade.php create mode 100644 resources/views/dashboard/data-kriteria.blade.php create mode 100644 resources/views/dashboard/index.blade.php create mode 100644 resources/views/layout/main.blade.php create mode 100644 resources/views/layout/navbar.blade.php create mode 100644 resources/views/layout/page.blade.php create mode 100644 resources/views/layout/sidebar.blade.php diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 59f1c7b..aa64c8f 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -2,8 +2,15 @@ namespace App\Http\Controllers; +use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Str; +use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Facades\Password; +use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\Session; class AuthController extends Controller { @@ -13,19 +20,158 @@ public function showLoginForm() } public function login(Request $request) -{ - $credentials = $request->only(['nomorinduk', 'password']); + { + $credentials = $request->only(['username', 'password']); - if (Auth::attempt($credentials)) { - $user = Auth::user(); + if (Auth::attempt($credentials)) { + $user = Auth::user(); - if ($user->role === 'wakil_kepala') { - return redirect()->intended('/wakil_kepala/dashboard'); - } elseif ($user->role === 'siswa') { - return redirect()->intended('/siswa/dashboard'); + if ($user->role === 'wakil_kepala') { + return redirect()->intended('/wakil_kepala/dashboard'); + } elseif ($user->role === 'siswa') { + return redirect()->intended('/siswa/dashboard'); + } + } + + $validator = Validator::make($request->all(), [ + 'username' => 'required', + 'password' => 'required', + ], [ + 'required' => ':attribute harus diisi.', + ]); + + $userCount = User::where('username', $request->username)->count(); + + if ($validator->fails() || $userCount == 0) { + // Tambahkan pesan error khusus jika username tidak terdaftar + $validator->errors()->add('username', 'Akun tidak terdaftar.'); + + return redirect('/login') + ->withErrors($validator) + ->withInput(); + } + + $remember = true; // Sesuaikan dengan kebutuhan Anda + + if (Auth::attempt(['username' => $request->username, 'password' => $request->password], $remember)) { + $user = Auth::user(); + $request->session()->put('user_id', $user->id); + + // Membuat dan menyimpan token "remember me" + $token = $user->createToken("auth-token")->plainTextToken; + $user->update(['remember_token' => $token]); + + return redirect('/dashboard')->with('success', 'Login berhasil!'); + } else { + return redirect('/login') + ->withErrors(['username' => 'Username atau password salah.']) + ->withInput(); } } - return redirect('/login')->with('error', 'Login gagal. Periksa kembali NIS/NIP dan password Anda.'); + public function showRegisterForm() + { + return view('auth.register'); + } + + public function register(Request $request) + { + $validator = Validator::make($request->all(), [ + 'name' => ['required', 'min:3', 'max:225'], + 'username' => ['required', 'min:3', 'max:10'], + 'email' => 'required|email', + 'password' => 'required|min:5|max:255', + ], [ + 'required' => ':attribute harus diisi.', + 'email' => ':attribute harus berupa email yang valid.', + 'min' => 'panjang :attribute minimal :min karakter.', + ]); + + if ($validator->fails()) { + return redirect('/register') + ->withErrors($validator) + ->withInput(); + } + + if (User::where('username', $request->username)->exists() || User::where('email', $request->email)->exists()) { + return redirect('/register') + ->withErrors(['username' => 'Username atau email sudah digunakan.']) + ->withInput(); + } + + $user = User::create([ + 'name' => $request->name, + 'username' => $request->username, + 'email' => $request->email, + 'password' => bcrypt($request->password), + 'role' => 'siswa', + ]); + + return redirect('/login')->with('success', 'Registrasi berhasil! Silakan login.'); + } + + public function showResetForm(Request $request, $token = null) + { + return view('auth.reset-password')->with( + ['email' => $request->email, 'token' => $token] + ); + } + + public function showLinkRequestForm(Request $request) + { + return view('auth.forgot-password'); + } + + // Mengirim email tautan reset password + public function sendResetLinkEmail(Request $request) + { + $request->validate(['email' => 'required|email']); + + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status === Password::RESET_LINK_SENT + ? back()->with(['status' => __($status)]) + : back()->withErrors(['email' => __($status)]); + } + + // Menangani proses reset password + public function resetPassword(Request $request) + { + $request->validate([ + 'token' => 'required', + 'email' => 'required|email', + 'password' => 'required|confirmed|min:6', + ]); + + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user, $password) { + $user->forceFill([ + 'password' => bcrypt($password), + 'remember_token' => Str::random(60), + ])->save(); + // Hapus token "remember me" setelah reset password + $user->tokens()->delete(); + } + ); + + return $status == Password::PASSWORD_RESET + ? redirect('/login')->with(['status' => __($status)]) + : back()->withErrors(['email' => [__($status)]]); + } + + public function logout(Request $request) + { + $guard = 'web'; // Sesuaikan dengan guard yang digunakan + + // Hapus seluruh cookie sesi + Session::flush(); + + // Logout pengguna + Auth::guard($guard)->logout(); + + return redirect('/login')->with('success', 'Terimakasih sudah logout! Silakan login kembali.'); } } diff --git a/app/Models/User.php b/app/Models/User.php index 06b987e..f0281d7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -19,7 +19,8 @@ class User extends Authenticatable */ protected $fillable = [ 'name', - 'nomorinduk', // Ubah 'email' menjadi 'NIS' + 'username', + 'email', 'password', 'role', ]; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index ded2852..416f11e 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -14,7 +14,9 @@ public function up(): void Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->string('nomorinduk')->unique(); + $table->string('username'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('role'); $table->rememberToken(); diff --git a/public/src/styles/style.css b/public/src/styles/style.css index c49c56a..6b7472e 100644 --- a/public/src/styles/style.css +++ b/public/src/styles/style.css @@ -381,8 +381,8 @@ .highcharts-root{ .bootstrap-select .dropdown-toggle{ height: 45px; padding-right: 30px; - font-size: 14px; - font-weight: 400; + font-size: 12px; + font-weight: 200; } .bootstrap-select.form-control-sm .dropdown-toggle{ height: 38px; @@ -1131,12 +1131,12 @@ .user-info-dropdown .dropdown-toggle{ font-size: 16px; } .user-info-dropdown .dropdown-toggle .user-icon{ - width: 52px; - height: 52px; - font-size: 24px; + width: 20px; + height: 20px; + font-size: 10px; background: #ebeff3; color: #1b00ff; - line-height: 52px; + line-height: 20px; text-align: center; display: inline-block; vertical-align: middle; @@ -1468,7 +1468,7 @@ .sidebar-menu .dropdown-toggle .micon{ left: 10px; width: 42px; height: 42px; - font-size: 22px; + font-size: 12px; font-weight: 400; display: flex; align-items: center; diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php new file mode 100644 index 0000000..69a5cda --- /dev/null +++ b/resources/views/auth/forgot-password.blade.php @@ -0,0 +1,47 @@ +@extends('layout.main') + + +
+
+
+
+ +
+ @if(session('error')) +
{{ session('error') }}
+ @endif +
+ +
+
+
+
+ diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index f502bde..b8774bc 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -1,70 +1,72 @@ - - - - - - Login - - - - - - -
-
-
-
-
-
-
- Welcome back you've been missed! -
-
-
-
- @if(session('error')) -
{{ session('error') }}
- @endif -
-
-
-
- - BootstrapBrain Logo - -
-

Selamat Datang !

-
-
+@extends('layout.main') + + + -
-
-
-
- + diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..6c0cf5b --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,73 @@ +@extends('layout.main') + + +
+
+
+
+ +
+ @if(session('error')) +
{{ session('error') }}
+ @endif +
+ +
+
+
+
+ diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php new file mode 100644 index 0000000..8683dad --- /dev/null +++ b/resources/views/auth/reset-password.blade.php @@ -0,0 +1,61 @@ +@extends('layout.main') + + +
+
+
+
+ + {{-- --}} +
+ @if(session('error')) +
{{ session('error') }}
+ @endif +
+ +
+
+
+
+ diff --git a/resources/views/dashboard/data-kriteria.blade.php b/resources/views/dashboard/data-kriteria.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..65290b8 --- /dev/null +++ b/resources/views/dashboard/index.blade.php @@ -0,0 +1 @@ +ini halaman index diff --git a/resources/views/layout/main.blade.php b/resources/views/layout/main.blade.php new file mode 100644 index 0000000..f844788 --- /dev/null +++ b/resources/views/layout/main.blade.php @@ -0,0 +1,91 @@ + + + + + + + DeskApp + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + @yield('body') + + +
+ + + + + + + + + + + + + + + + + + + {{-- @include('sweetalert::alert') --}} + + + diff --git a/resources/views/layout/master.blade.php b/resources/views/layout/master.blade.php index 8c7e435..6f2521e 100644 --- a/resources/views/layout/master.blade.php +++ b/resources/views/layout/master.blade.php @@ -1,729 +1,527 @@ - - - - DeskApp - Bootstrap Admin Dashboard HTML Template - - - - + + + + DeskApp - Bootstrap Admin Dashboard HTML Template - - + + + + - - - - - - - - + + - - - - - - - - - - + + + + + + + + -

Sidebar Background

- + +
+
+ + + +
+
+
+ +
+ + +
+
-

Menu Dropdown Icon

- + +

Menu Dropdown Icon

+ - -
+
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - diff --git a/resources/views/layout/navbar.blade.php b/resources/views/layout/navbar.blade.php new file mode 100644 index 0000000..3909bda --- /dev/null +++ b/resources/views/layout/navbar.blade.php @@ -0,0 +1,65 @@ +@extends('layout.main') + +
+
+ + + +
+
+ +
+
diff --git a/resources/views/layout/page.blade.php b/resources/views/layout/page.blade.php new file mode 100644 index 0000000..c54b6d9 --- /dev/null +++ b/resources/views/layout/page.blade.php @@ -0,0 +1,40 @@ +@extends('layout.main') + +
+
+
+ +
+
+
+ +
+
diff --git a/resources/views/layout/sidebar.blade.php b/resources/views/layout/sidebar.blade.php new file mode 100644 index 0000000..b5f0f56 --- /dev/null +++ b/resources/views/layout/sidebar.blade.php @@ -0,0 +1,75 @@ +@extends('layout.main') + + diff --git a/resources/views/siswa/dashboard.blade.php b/resources/views/siswa/dashboard.blade.php index 20f7a22..abf4fa9 100644 --- a/resources/views/siswa/dashboard.blade.php +++ b/resources/views/siswa/dashboard.blade.php @@ -1,25 +1,21 @@ -@extends('layouts.siswa') +@extends('layout.main') +@section('body') + +@include('layout.navbar') +@include('layout.sidebar')
-
- -

- Selamat Datang -
Hi, {{ auth()->user()->name }}!
+ Welcome Back! +
{{ auth()->user()->name }}!

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde - hic non repellendus debitis iure, doloremque assumenda. Autem - modi, corrupti, nobis ea iure fugiat, veniam non quaerat - mollitia animi error corporis. -

+@endsection diff --git a/routes/web.php b/routes/web.php index 6f52612..7957ec9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use App\Http\Controllers\AuthController; use App\Http\Controllers\WakilKepalaController; use App\Http\Controllers\SiswaController; +use Illuminate\Support\Facades\Auth; /* |-------------------------------------------------------------------------- @@ -29,10 +30,35 @@ })->name('ekstrakurikuler'); +// Route::get('/login', function () { +// if (Auth::check()) { +// return redirect('/dashboard'); +// } +// return view('auth.login'); +// })->name('login'); Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login'); - Route::post('/login', [AuthController::class, 'login']); +// Route::get('/register', function () { +// if (Auth::check()) { +// return redirect('/dashboard'); +// } +// return view('auth.register'); +// })->name('register'); +Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register'); +Route::post('/register', [AuthController::class, 'register']); + +Route::get('/forgot-password', function () { + if (Auth::check()) { + return redirect('/dashboard'); + } + return view('auth.forgot-password'); +})->name('password.request'); +Route::post('/forgot-password', [AuthController::class, 'sendResetLinkEmail'])->name('password.email'); + +Route::get('/reset-password/{token}', [AuthController::class, 'showResetForm'])->name('password.reset'); +Route::post('/reset-password', [AuthController::class, 'resetPassword'])->name('password.update'); + Route::middleware(['auth', 'role:wakil_kepala'])->group(function () { Route::get('/wakil_kepala/dashboard', [WakilKepalaController::class, 'dashboard'])->name('wakil_kepala.dashboard'); Route::get('/wakil_kepala/kriteria', [WakilKepalaController::class, 'kriteria'])->name('wakil_kepala.kriteria'); @@ -42,3 +68,6 @@ Route::middleware(['auth', 'role:siswa'])->group(function () { Route::get('/siswa/dashboard', [SiswaController::class, 'dashboard'])->name('siswa.dashboard'); }); + +Route::get('/logout', [AuthController::class, 'logout'])->name('logout'); +Route::post('/logout', [AuthController::class, 'logout'])->name('logout');