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') + +
+- 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. -