diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index e60fc28..61c691e 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -41,6 +41,62 @@ public function __construct() $this->middleware('auth')->only('logout'); } + /** + * Handle a login request to the application. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + public function login(Request $request) + { + $this->validateLogin($request); + + // If the class is using the ThrottlesLogins trait, we can automatically throttle + // the login attempts for this application. We'll key this by the username and + // the IP address of the client making these requests into this application. + if (method_exists($this, 'hasTooManyLoginAttempts') && + $this->hasTooManyLoginAttempts($request)) { + $this->fireLockoutEvent($request); + + return $this->sendLockoutResponse($request); + } + + if ($this->attemptLogin($request)) { + return $this->sendLoginResponse($request); + } + + // If the login attempt was unsuccessful we will increment the number of attempts + // to login and redirect the user back to the login form. Of course, when this + // user surpasses their maximum number of attempts they will get locked out. + $this->incrementLoginAttempts($request); + + return $this->sendFailedLoginResponse($request); + } + + /** + * Get the failed login response instance. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendFailedLoginResponse(Request $request) + { + // Cek apakah email ada di database tapi belum diverifikasi + $user = \App\Models\User::where('email', $request->email)->first(); + + 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.') + ->withInput($request->only('email')); + } + + return redirect()->route('home') + ->with('login_error', 'Kredensial yang Anda masukkan tidak valid.') + ->withInput($request->only('email')); + } + /** * The user has been authenticated. * @@ -57,9 +113,9 @@ protected function authenticated(Request $request, $user) $request->session()->invalidate(); $request->session()->regenerateToken(); - throw ValidationException::withMessages([ - 'email' => [__('Akun Anda belum diverifikasi. Silakan periksa email Anda untuk link verifikasi.')], - ])->redirectTo(route('verification.notice')); + return redirect()->route('home') + ->with('login_error', 'Akun Anda belum diverifikasi. Silakan periksa email Anda untuk link verifikasi.') + ->withInput($request->only('email')); } session()->flash('success', 'Login berhasil!'); diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php index 72c89db..abc6f2c 100644 --- a/app/Http/Controllers/Auth/VerificationController.php +++ b/app/Http/Controllers/Auth/VerificationController.php @@ -53,14 +53,13 @@ public function verify(Request $request) $user = \App\Models\User::find($request->route('id')); if (!hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) { - return redirect()->route('verification.notice') + return redirect()->route('home') ->with('error', 'Link verifikasi tidak valid.'); } if ($user->hasVerifiedEmail()) { - return redirect()->route('login') - ->with('verified', true) - ->with('success', 'Email sudah terverifikasi sebelumnya. Silakan login.'); + return redirect()->route('home') + ->with('verified', 'Email sudah terverifikasi sebelumnya. Silakan login.'); } if ($user->markEmailAsVerified()) { @@ -71,18 +70,44 @@ public function verify(Request $request) auth()->logout(); } - return redirect()->route('login') - ->with('verified', true) - ->with('success', 'Email berhasil diverifikasi. Silakan login.'); + return redirect()->route('home') + ->with('verified', 'Email berhasil diverifikasi. Silakan login.'); } /** - * Show the verification success page. + * Resend the email verification notification. * - * @return \Illuminate\Contracts\View\View + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse */ - public function verified() + public function resend(Request $request) { - return view('auth.verified'); + 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); } } \ No newline at end of file diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php index 157d1c5..560eb04 100644 --- a/resources/views/layouts/main.blade.php +++ b/resources/views/layouts/main.blade.php @@ -22,8 +22,8 @@