diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index cf415db..5af9e01 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -39,7 +39,8 @@ public function __construct() */ public function showLinkRequestForm() { - return view('auth.passwords.email'); + // Redirect to home page with forgot_password modal flag + return redirect()->route('home')->with('status', 'Silahkan masukkan email Anda untuk mereset password.'); } /** @@ -73,8 +74,10 @@ public function sendResetLinkEmail(Request $request) */ protected function sendResetLinkResponse(Request $request, $response) { - session()->flash('success', trans($response)); - return back(); + // Return to home page with success message and keep the forgot_password modal open + return redirect()->route('home') + ->with('status', trans($response)) + ->with('success', 'Link reset password telah dikirim ke email Anda.'); } /** @@ -86,8 +89,10 @@ protected function sendResetLinkResponse(Request $request, $response) */ protected function sendResetLinkFailedResponse(Request $request, $response) { - session()->flash('error', trans($response)); - return back() - ->withInput($request->only('email')); + // Return to home page with error and keep the forgot_password modal open + return redirect()->route('home') + ->withInput($request->only('email')) + ->with('error', trans($response)) + ->with('status', 'Terjadi kesalahan. Silakan coba lagi.'); } } \ No newline at end of file diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 61c691e..e8a4202 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -88,12 +88,12 @@ protected function sendFailedLoginResponse(Request $request) if ($user && !$user->hasVerifiedEmail()) { return redirect()->route('home') - ->with('login_error', 'Email belum diverifikasi. Silakan periksa email Anda untuk link verifikasi atau klik resend untuk mengirim ulang.') + ->with('login_error', 'Email belum diverifikasi. Silakan periksa email Anda untuk link verifikasi.') ->withInput($request->only('email')); } return redirect()->route('home') - ->with('login_error', 'Kredensial yang Anda masukkan tidak valid.') + ->with('login_error', 'Email atau password yang anda masukkan salah.') ->withInput($request->only('email')); } diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 0053598..e7774b3 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -6,6 +6,10 @@ use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Password; +use Illuminate\Support\Str; +use Illuminate\Auth\Events\PasswordReset; class ResetPasswordController extends Controller { @@ -20,7 +24,9 @@ class ResetPasswordController extends Controller | */ - use ResetsPasswords; + use ResetsPasswords { + reset as protected traitReset; + } /** * Where to redirect users after resetting their password. @@ -39,6 +45,71 @@ public function __construct() $this->middleware('guest'); } + /** + * Display the password reset view for the given token. + * + * @param \Illuminate\Http\Request $request + * @param string|null $token + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function showResetForm(Request $request, $token = null) + { + // Pass token directly as a query parameter instead of route parameter + return redirect()->route('home', [ + 'token' => $token, + 'email' => $request->email, + 'reset' => 'true' // Add explicit reset parameter for more compatibility + ])->with('reset', true); + } + + /** + * Override the reset method from the trait to prevent auto-login + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + public function reset(Request $request) + { + $request->validate($this->rules(), $this->validationErrorMessages()); + + // Here's the main change - instead of using the trait reset method, + // we implement a custom reset logic without the auto-login + $response = $this->broker()->reset( + $this->credentials($request), + function ($user, $password) { + $this->resetPassword($user, $password); + + // Don't login the user automatically + // Auth::guard()->login($user); <-- This line is removed + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view with a success message. + return $response == Password::PASSWORD_RESET + ? $this->sendResetResponse($request, $response) + : $this->sendResetFailedResponse($request, $response); + } + + /** + * Reset the given user's password. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param string $password + * @return void + */ + protected function resetPassword($user, $password) + { + $user->password = bcrypt($password); + $user->setRememberToken(Str::random(60)); + $user->save(); + + event(new PasswordReset($user)); + + // Don't login automatically + // $this->guard()->login($user); <-- This line is removed + } + /** * Get the response for a successful password reset. * @@ -48,8 +119,10 @@ public function __construct() */ protected function sendResetResponse(Request $request, $response) { - session()->flash('success', trans($response)); - return redirect($this->redirectPath()); + // Redirect to home with success message and open login modal + return redirect()->route('home') + ->with('success', 'Password berhasil direset.') + ->with('login_error', 'Silakan login dengan password baru Anda.'); } /** @@ -61,9 +134,14 @@ protected function sendResetResponse(Request $request, $response) */ protected function sendResetFailedResponse(Request $request, $response) { - session()->flash('error', trans($response)); - return redirect()->back() - ->withInput($request->only('email')) - ->withErrors(['email' => trans($response)]); + // Return to home with reset modal open showing the error + return redirect()->route('home', [ + 'token' => $request->token, + 'email' => $request->email, + 'reset' => 'true' // Add explicit reset parameter for more compatibility + ]) + ->with('reset', true) + ->with('error', trans($response)) + ->withErrors(['email' => trans($response)]); } } \ No newline at end of file diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php index abc6f2c..65233e7 100644 --- a/app/Http/Controllers/Auth/VerificationController.php +++ b/app/Http/Controllers/Auth/VerificationController.php @@ -6,7 +6,6 @@ use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\VerifiesEmails; use Illuminate\Http\Request; -use Illuminate\Auth\Events\Verified; class VerificationController extends Controller { @@ -37,77 +36,31 @@ class VerificationController extends Controller */ public function __construct() { - $this->middleware('auth')->except(['verify']); + $this->middleware('auth'); $this->middleware('signed')->only('verify'); $this->middleware('throttle:6,1')->only('verify', 'resend'); } /** - * Mark the authenticated user's email address as verified. + * Custom handler for successful verification * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\RedirectResponse + * @return \Illuminate\Http\Response */ - public function verify(Request $request) + public function verified(Request $request) { - $user = \App\Models\User::find($request->route('id')); - - if (!hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) { - return redirect()->route('home') - ->with('error', 'Link verifikasi tidak valid.'); - } - - if ($user->hasVerifiedEmail()) { - return redirect()->route('home') - ->with('verified', 'Email sudah terverifikasi sebelumnya. Silakan login.'); - } - - if ($user->markEmailAsVerified()) { - event(new Verified($user)); - } - - if ($request->user()) { - auth()->logout(); - } - return redirect()->route('home') - ->with('verified', 'Email berhasil diverifikasi. Silakan login.'); + ->with('verified', 'Email Anda berhasil diverifikasi. Silakan login untuk melanjutkan.'); } /** - * Resend the email verification notification. + * The user has been verified. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\RedirectResponse + * @return mixed */ - public function resend(Request $request) + protected function verified(Request $request) { - if ($request->user()->hasVerifiedEmail()) { - return redirect()->route('home'); - } - - $request->user()->sendEmailVerificationNotification(); - - return back()->with('resent', true) - ->with('success', 'Link verifikasi telah dikirim ulang ke alamat email Anda.'); - } - - /** - * Show the email verification notice. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View - */ - public function show(Request $request) - { - if ($request->user()->hasVerifiedEmail()) { - return redirect($this->redirectPath()); - } - - // Redirect to homepage with message instead of showing verification.notice view - return redirect()->route('home') - ->with('error', 'Silakan verifikasi email Anda terlebih dahulu. - Link verifikasi telah dikirim ke alamat email Anda.') - ->with('resend_link', true); + return redirect($this->redirectPath()) + ->with('verified', 'Email Anda berhasil diverifikasi!'); } } \ No newline at end of file diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php index 560eb04..83d8298 100644 --- a/resources/views/layouts/main.blade.php +++ b/resources/views/layouts/main.blade.php @@ -22,9 +22,9 @@