diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php index 65233e7..49112a8 100644 --- a/app/Http/Controllers/Auth/VerificationController.php +++ b/app/Http/Controllers/Auth/VerificationController.php @@ -6,6 +6,8 @@ use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\VerifiesEmails; use Illuminate\Http\Request; +use Illuminate\Auth\Events\Verified; +use Illuminate\Support\Facades\Auth; class VerificationController extends Controller { @@ -36,31 +38,86 @@ class VerificationController extends Controller */ public function __construct() { - $this->middleware('auth'); + // Pastikan middleware auth hanya untuk method yang membutuhkan autentikasi + $this->middleware('auth')->except(['verify']); $this->middleware('signed')->only('verify'); $this->middleware('throttle:6,1')->only('verify', 'resend'); } /** - * Custom handler for successful verification + * Mark the authenticated user's email address as verified. * - * @return \Illuminate\Http\Response + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse */ - public function verified(Request $request) + public function verify(Request $request) { + $user = \App\Models\User::find($request->route('id')); + + if (!$user) { + return redirect()->route('home') + ->with('error', 'User tidak ditemukan.'); + } + + if (!hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) { + return redirect()->route('home') + ->with('error', 'Link verifikasi tidak valid.'); + } + + if ($user->hasVerifiedEmail()) { + // Jika user sudah verifikasi sebelumnya, pastikan tidak login otomatis + return redirect()->route('home') + ->with('verified', 'Email sudah terverifikasi sebelumnya. Silakan login.'); + } + + if ($user->markEmailAsVerified()) { + event(new Verified($user)); + } + + // Pastikan user harus login setelah verifikasi + if ($request->user()) { + auth()->logout(); + } + return redirect()->route('home') - ->with('verified', 'Email Anda berhasil diverifikasi. Silakan login untuk melanjutkan.'); + ->with('verified', 'Email berhasil diverifikasi. Silakan login.'); } /** - * The user has been verified. + * Resend the email verification notification. * * @param \Illuminate\Http\Request $request - * @return mixed + * @return \Illuminate\Http\RedirectResponse */ - protected function verified(Request $request) + public function resend(Request $request) { - return redirect($this->redirectPath()) - ->with('verified', 'Email Anda berhasil diverifikasi!'); + if ($request->user()->hasVerifiedEmail()) { + return redirect()->route('home') + ->with('success', 'Email Anda sudah terverifikasi.'); + } + + $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 ke homepage dengan pesan untuk verifikasi + 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