middleware('guest'); } public function showLinkRequestForm() { return View::make('auth.passwords.email'); } public function sendResetLinkEmail(Request $request) { Log::info('Reset Password Request Started', [ 'email' => $request->email, 'request_url' => $request->fullUrl(), 'request_method' => $request->method() ]); try { $request->validate([ 'email' => ['required', 'email', 'exists:users,email'], ]); $user = User::where('email', $request->email)->first(); if (!$user) { Log::error('Email not found', [ 'email' => $request->email ]); return Redirect::back()->withErrors([ 'email' => ['Email tidak ditemukan dalam sistem kami.'], ]); } // Generate token reset password $token = Str::random(64); $expiresAt = now()->addHours(24); Log::info('Generated reset token', [ 'email' => $user->email, 'token' => $token, 'expires_at' => $expiresAt ]); // Update user dengan token baru $user->reset_password_token = $token; $user->reset_password_expires_at = $expiresAt; $user->save(); // Verifikasi update berhasil $userAfterUpdate = User::where('email', $user->email) ->where('reset_password_token', $token) ->first(); Log::info('Update Result', [ 'token_stored' => $userAfterUpdate ? $userAfterUpdate->reset_password_token : null, 'expires_at_stored' => $userAfterUpdate ? $userAfterUpdate->reset_password_expires_at : null ]); // Kirim email dengan link reset password Mail::send('auth.passwords.reset-link', ['token' => $token, 'email' => $user->email], function($message) use($user) { $message->to($user->email); $message->subject('Reset Password - DJEE Elektronik'); }); return Redirect::back()->with('status', 'Link reset password telah dikirim ke email Anda. Silakan cek inbox atau folder spam Anda.'); } catch (\Exception $e) { Log::error('Error during password reset request', [ 'email' => $request->email, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return Redirect::back()->withErrors(['email' => 'Terjadi kesalahan saat memproses permintaan reset password.']); } } public function showResetForm($token, $email) { Log::info('Reset Password Form Access', [ 'email' => $email, 'token' => $token, 'current_time' => now(), 'request_url' => request()->fullUrl() ]); try { $user = User::where('email', $email) ->where('reset_password_token', $token) ->where('reset_password_expires_at', '>', now()) ->first(); Log::info('Reset Password Query Result', [ 'user_found' => $user ? true : false, 'expires_at' => $user ? $user->reset_password_expires_at : null, 'stored_token' => $user ? $user->reset_password_token : null ]); if (!$user) { Log::error('Invalid or expired reset token', [ 'email' => $email, 'token' => $token ]); return Redirect::route('password.request') ->withErrors(['email' => 'Link reset password tidak valid atau sudah kadaluarsa.']); } return View::make('auth.passwords.reset', [ 'token' => $token, 'email' => $email ]); } catch (\Exception $e) { Log::error('Error showing reset form', [ 'email' => $email, 'token' => $token, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return Redirect::route('password.request') ->withErrors(['email' => 'Terjadi kesalahan saat memproses permintaan reset password.']); } } public function reset(Request $request) { Log::info('Reset Password Attempt', [ 'email' => $request->email, 'token' => $request->token, 'current_time' => now(), 'request_url' => $request->fullUrl() ]); try { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|min:8|confirmed', ]); $user = User::where('email', $request->email) ->where('reset_password_token', $request->token) ->where('reset_password_expires_at', '>', now()) ->first(); Log::info('Reset Password Query Result', [ 'user_found' => $user ? true : false, 'expires_at' => $user ? $user->reset_password_expires_at : null ]); if (!$user) { Log::error('Invalid or expired reset token during reset', [ 'email' => $request->email, 'token' => $request->token ]); return Redirect::back()->withErrors(['email' => 'Link reset password tidak valid atau sudah kadaluarsa.']); } // Update password dan hapus token $user->password = Hash::make($request->password); $user->reset_password_token = null; $user->reset_password_expires_at = null; $user->save(); Log::info('Password reset successful', [ 'email' => $user->email ]); return Redirect::route('login') ->with('status', 'Password Anda berhasil diubah. Silakan login dengan password baru Anda.'); } catch (\Exception $e) { Log::error('Error during password reset', [ 'email' => $request->email, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return Redirect::back()->withErrors(['email' => 'Terjadi kesalahan saat mereset password.']); } } }