From 3449d4f954002c943551f75b0acb1852bcaf0705 Mon Sep 17 00:00:00 2001 From: ericko-cyber Date: Thu, 8 May 2025 18:38:31 +0700 Subject: [PATCH] up --- .../Auth/LupaPasswordController.php | 115 ++++++++++++++++++ resources/views/layouts/inputemail.blade.php | 46 +++++++ resources/views/layouts/login.blade.php | 5 +- resources/views/layouts/otp.blade.php | 46 +++++++ resources/views/layouts/register.blade.php | 2 +- resources/views/layouts/resetpass.blade.php | 59 +++++++++ resources/views/partials/tentang.php | 2 +- routes/web.php | 26 +++- 8 files changed, 296 insertions(+), 5 deletions(-) create mode 100644 app/Http/Controllers/Auth/LupaPasswordController.php create mode 100644 resources/views/layouts/inputemail.blade.php create mode 100644 resources/views/layouts/otp.blade.php create mode 100644 resources/views/layouts/resetpass.blade.php diff --git a/app/Http/Controllers/Auth/LupaPasswordController.php b/app/Http/Controllers/Auth/LupaPasswordController.php new file mode 100644 index 0000000..a9c7e68 --- /dev/null +++ b/app/Http/Controllers/Auth/LupaPasswordController.php @@ -0,0 +1,115 @@ +validate([ + 'email' => 'required|email|exists:accounts,email', + ]); + + $otp = rand(100000, 999999); + + // Simpan OTP ke database + $account = Account::where('email', $request->email)->first(); + $account->otp_code = $otp; + $account->otp_expires_at = Carbon::now()->addMinutes(10); + $account->save(); + + try { + // Kirim OTP ke email + Mail::raw("Kode OTP Anda adalah: $otp. OTP ini berlaku selama 10 menit.", function ($message) use ($request) { + $message->to($request->email) + ->subject('Reset Password OTP'); + }); + } catch (\Exception $e) { + return back()->withErrors(['email' => 'Gagal mengirim email. Silakan coba lagi.']); + } + + return redirect()->route('otp.form')->with('email', $request->email); + } + + public function verifyOtp(Request $request) + { + $request->validate([ + 'email' => 'required|email', + 'otp_code' => 'required', + ]); + + // Cari akun berdasarkan email dan kode OTP yang valid + $account = Account::where('email', $request->email) + ->where('otp_code', $request->otp_code) + ->where('otp_expires_at', '>', Carbon::now()) + ->first(); + + // Log untuk debugging + Log::debug('Verifikasi OTP: ', [ + 'email' => $request->email, + 'otp_code' => $request->otp_code, + 'otp_expires_at' => $account ? $account->otp_expires_at : 'null', + 'found_account' => $account ? 'true' : 'false', + ]); + + if (!$account) { + return back()->withErrors(['otp_code' => 'Kode OTP tidak valid atau sudah kedaluwarsa.']); + } + + // OTP valid, simpan email di session dan arahkan ke form reset password + session(['email' => $request->email]); + + return redirect()->route('reset.password.form'); + } + + + + // Reset password + public function resetPassword(Request $request) + { + Log::debug('Reset Password Request:', $request->all()); + + $request->validate([ + 'email' => 'required|email', + 'password' => 'required|confirmed|min:6', + ]); + + $account = Account::where('email', $request->email)->firstOrFail(); + + $account->password = Hash::make($request->password); + $account->otp_code = null; + $account->otp_expires_at = null; + $account->save(); + + return redirect()->route('login')->with('success', 'Password berhasil direset.'); + } +} diff --git a/resources/views/layouts/inputemail.blade.php b/resources/views/layouts/inputemail.blade.php new file mode 100644 index 0000000..9649394 --- /dev/null +++ b/resources/views/layouts/inputemail.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.auth') + +@section('title', 'Lupa Password') + +@section('content') + + + +
+ +

Lupa Password

+ + + +
+ +@endsection diff --git a/resources/views/layouts/login.blade.php b/resources/views/layouts/login.blade.php index 92fd11c..415c9f4 100644 --- a/resources/views/layouts/login.blade.php +++ b/resources/views/layouts/login.blade.php @@ -3,6 +3,7 @@ @section('title', 'Login') @section('content') +

Login Dulu Sob

@@ -32,8 +33,8 @@ @endif - - + + diff --git a/resources/views/layouts/otp.blade.php b/resources/views/layouts/otp.blade.php new file mode 100644 index 0000000..479bded --- /dev/null +++ b/resources/views/layouts/otp.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.auth') + +@section('title', 'Otp') + +@section('content') + + + + + +@endsection diff --git a/resources/views/layouts/register.blade.php b/resources/views/layouts/register.blade.php index 232fde8..482cc5e 100644 --- a/resources/views/layouts/register.blade.php +++ b/resources/views/layouts/register.blade.php @@ -67,7 +67,7 @@ - + diff --git a/resources/views/layouts/resetpass.blade.php b/resources/views/layouts/resetpass.blade.php new file mode 100644 index 0000000..27bb16c --- /dev/null +++ b/resources/views/layouts/resetpass.blade.php @@ -0,0 +1,59 @@ +@extends('layouts.auth') + +@section('title', 'Reset Sandi') + +@section('content') + + + + + +@endsection diff --git a/resources/views/partials/tentang.php b/resources/views/partials/tentang.php index 2412129..171db9f 100644 --- a/resources/views/partials/tentang.php +++ b/resources/views/partials/tentang.php @@ -223,7 +223,7 @@

Gallyndra Fatkhu Dinata, S.P., M.P.

Gallyndra Fatkhu Dinata, S.P., M.P. merupakan dosen di Jurusan Produksi Pertanian, Politeknik Negeri Jember. - Beliau memiliki keahlian dalam bidang budidaya pertanian dan pengelolaan tanaman hortikultura, serta aktif dalam berbagai kegiatan penelitian pada tanaman maupun hama. + Beliau memiliki keahlian dalam bidang budidaya pertanian dan pengelolaan tanaman hortikultura, serta aktif dalam berbagai kegiatan penelitian pada tanaman. Sebagai pakar, beliau telah banyak membantu mahasiswa dalam mengembangkan penelitian yang aplikatif di bidang pertanian modern.

diff --git a/routes/web.php b/routes/web.php index 1d38f0a..099f2b8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ // Import the controllers use App\Http\Controllers\Auth\LoginController; use App\Http\Controllers\Auth\RegisterController; +use App\Http\Controllers\Auth\LupaPasswordController; use App\Http\Controllers\HomeController; use App\Http\Controllers\ProfileController; use App\Http\Controllers\HistoryController; @@ -64,6 +65,25 @@ Route::delete('/gejala/{id}', [DaftarGejalaController::class, 'destroy'])->name('gejala.destroy'); }); +// Route untuk menampilkan form input email +Route::get('lupa-kata-sandi', [LupaPasswordController::class, 'showInputEmail'])->name('lupa.kata.sandi'); + +// Route untuk mengirimkan OTP ke email +Route::post('kirim-otp', [LupaPasswordController::class, 'sendOtp'])->name('otp.send'); + +// Route untuk menampilkan form OTP +Route::get('otp', [LupaPasswordController::class, 'showOtpForm'])->name('otp.form'); + +// Route untuk memverifikasi OTP +Route::post('verifikasi-otp', [LupaPasswordController::class, 'verifyOtp'])->name('otp.verify'); + +// Route untuk menampilkan form reset password +Route::get('reset-password', [LupaPasswordController::class, 'showResetPass'])->name('reset.password.form'); + +// Route untuk melakukan reset password +Route::post('reset-password', [LupaPasswordController::class, 'resetPassword'])->name('reset.password'); + + // Registration Routes Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register'); Route::post('register', [RegisterController::class, 'register']); @@ -73,6 +93,11 @@ Route::post('/diagnosa/process', [DiagnosaController::class, 'process'])->name('diagnosa.process')->middleware('auth'); Route::get('/diagnosa/hasil/{id}', [DiagnosaController::class, 'hasil'])->name('diagnosa.hasil')->middleware('auth'); +// Lupa Pass +Route::get('/lupapass', function () { + return view('layouts.inputemail'); +})->name('lupapass'); + // Login Routes Route::get('login', [LoginController::class, 'showLoginForm'])->name('login'); @@ -111,7 +136,6 @@ // Route ke halaman detail riwayat Route::get('/history/{id}/detail', [HistoryController::class, 'detail'])->name('history.detail'); Route::get('/history/{id}/print', [HistoryController::class, 'print'])->name('history.print')->middleware('auth'); - }); // Rincian detail penyakit