diff --git a/app/Http/Controllers/Auth/EmailVerificationController.php b/app/Http/Controllers/Auth/EmailVerificationController.php new file mode 100644 index 0000000..2c38e52 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationController.php @@ -0,0 +1,56 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(config('auth-ui.redirects.login', '/')); + } + + return Inertia::render('Auth/VerifyEmail'); + } + + /** + * Handle the email verification. + */ + public function verify(EmailVerificationRequest $request): RedirectResponse + { + $request->fulfill(); + + return redirect()->intended(config('auth-ui.redirects.login', '/')); + } + + /** + * Resend the email verification notification. + */ + public function resend(Request $request): RedirectResponse + { + if ($request->user()->hasVerifiedEmail()) { + return redirect()->intended(config('auth-ui.redirects.login', '/')); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/resources/js/Pages/Auth/VerifyEmail.vue b/resources/js/Pages/Auth/VerifyEmail.vue new file mode 100644 index 0000000..2314575 --- /dev/null +++ b/resources/js/Pages/Auth/VerifyEmail.vue @@ -0,0 +1,48 @@ + + + + + + + + Verify your email + + + We've sent a verification link to your email address. Please check your inbox and click the link to verify your account. + + + + + + Resend verification email + + + + diff --git a/routes/auth.php b/routes/auth.php index 064b017..38c27d1 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -1,6 +1,7 @@ group(function () { // Socialite routes Route::get('auth/{provider}', [SocialiteController::class, 'redirect'])->name('socialite.redirect'); - Route::get('auth/{provider}/callback', [SocialiteController::class, 'callback'])->name('socialite.callback'); + Route::get('auth/{provider}/callback', [SocialiteController::class, 'callback'])->name('socialite.callback')->middleware('throttle:10,1'); // Complete profile after social login (when username is taken) Route::get('complete-profile', [CompleteProfileController::class, 'create'])->name('auth.complete-profile'); @@ -32,4 +33,9 @@ Route::middleware('guest')->group(function () { Route::middleware('auth')->group(function () { Route::post('logout', [LoginController::class, 'destroy'])->name('logout'); + + // Email verification routes + Route::get('email/verify', [EmailVerificationController::class, 'notice'])->name('verification.notice'); + Route::get('email/verify/{id}/{hash}', [EmailVerificationController::class, 'verify'])->middleware('signed')->name('verification.verify'); + Route::post('email/verification-notification', [EmailVerificationController::class, 'resend'])->middleware('throttle:6,1')->name('verification.send'); });
+ We've sent a verification link to your email address. Please check your inbox and click the link to verify your account. +