diff --git a/routes/inertia.php b/routes/inertia.php index 914205ba4..9482fee73 100644 --- a/routes/inertia.php +++ b/routes/inertia.php @@ -28,7 +28,7 @@ ? config('jetstream.auth_session') : null; - Route::group(['middleware' => array_values(array_filter([$authMiddleware, $authSessionMiddleware, 'verified']))], function () { + Route::group(['middleware' => array_values(array_filter([$authMiddleware, $authSessionMiddleware]))], function () { // User & Profile... Route::get('/user/profile', [UserProfileController::class, 'show']) ->name('profile.show'); @@ -44,32 +44,34 @@ ->name('current-user.destroy'); } - // API... - if (Jetstream::hasApiFeatures()) { - Route::get('/user/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); - Route::post('/user/api-tokens', [ApiTokenController::class, 'store'])->name('api-tokens.store'); - Route::put('/user/api-tokens/{token}', [ApiTokenController::class, 'update'])->name('api-tokens.update'); - Route::delete('/user/api-tokens/{token}', [ApiTokenController::class, 'destroy'])->name('api-tokens.destroy'); - } + Route::group(['middleware' => 'verified'], function () { + // API... + if (Jetstream::hasApiFeatures()) { + Route::get('/user/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); + Route::post('/user/api-tokens', [ApiTokenController::class, 'store'])->name('api-tokens.store'); + Route::put('/user/api-tokens/{token}', [ApiTokenController::class, 'update'])->name('api-tokens.update'); + Route::delete('/user/api-tokens/{token}', [ApiTokenController::class, 'destroy'])->name('api-tokens.destroy'); + } - // Teams... - if (Jetstream::hasTeamFeatures()) { - Route::get('/teams/create', [TeamController::class, 'create'])->name('teams.create'); - Route::post('/teams', [TeamController::class, 'store'])->name('teams.store'); - Route::get('/teams/{team}', [TeamController::class, 'show'])->name('teams.show'); - Route::put('/teams/{team}', [TeamController::class, 'update'])->name('teams.update'); - Route::delete('/teams/{team}', [TeamController::class, 'destroy'])->name('teams.destroy'); - Route::put('/current-team', [CurrentTeamController::class, 'update'])->name('current-team.update'); - Route::post('/teams/{team}/members', [TeamMemberController::class, 'store'])->name('team-members.store'); - Route::put('/teams/{team}/members/{user}', [TeamMemberController::class, 'update'])->name('team-members.update'); - Route::delete('/teams/{team}/members/{user}', [TeamMemberController::class, 'destroy'])->name('team-members.destroy'); + // Teams... + if (Jetstream::hasTeamFeatures()) { + Route::get('/teams/create', [TeamController::class, 'create'])->name('teams.create'); + Route::post('/teams', [TeamController::class, 'store'])->name('teams.store'); + Route::get('/teams/{team}', [TeamController::class, 'show'])->name('teams.show'); + Route::put('/teams/{team}', [TeamController::class, 'update'])->name('teams.update'); + Route::delete('/teams/{team}', [TeamController::class, 'destroy'])->name('teams.destroy'); + Route::put('/current-team', [CurrentTeamController::class, 'update'])->name('current-team.update'); + Route::post('/teams/{team}/members', [TeamMemberController::class, 'store'])->name('team-members.store'); + Route::put('/teams/{team}/members/{user}', [TeamMemberController::class, 'update'])->name('team-members.update'); + Route::delete('/teams/{team}/members/{user}', [TeamMemberController::class, 'destroy'])->name('team-members.destroy'); - Route::get('/team-invitations/{invitation}', [TeamInvitationController::class, 'accept']) - ->middleware(['signed']) - ->name('team-invitations.accept'); + Route::get('/team-invitations/{invitation}', [TeamInvitationController::class, 'accept']) + ->middleware(['signed']) + ->name('team-invitations.accept'); - Route::delete('/team-invitations/{invitation}', [TeamInvitationController::class, 'destroy']) - ->name('team-invitations.destroy'); - } + Route::delete('/team-invitations/{invitation}', [TeamInvitationController::class, 'destroy']) + ->name('team-invitations.destroy'); + } + }); }); }); diff --git a/routes/livewire.php b/routes/livewire.php index be2111717..8d44bd625 100644 --- a/routes/livewire.php +++ b/routes/livewire.php @@ -24,25 +24,26 @@ ? config('jetstream.auth_session') : null; - Route::group(['middleware' => array_values(array_filter([$authMiddleware, $authSessionMiddleware, 'verified']))], function () { + Route::group(['middleware' => array_values(array_filter([$authMiddleware, $authSessionMiddleware]))], function () { // User & Profile... - Route::get('/user/profile', [UserProfileController::class, 'show']) - ->name('profile.show'); - - // API... - if (Jetstream::hasApiFeatures()) { - Route::get('/user/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); - } - - // Teams... - if (Jetstream::hasTeamFeatures()) { - Route::get('/teams/create', [TeamController::class, 'create'])->name('teams.create'); - Route::get('/teams/{team}', [TeamController::class, 'show'])->name('teams.show'); - Route::put('/current-team', [CurrentTeamController::class, 'update'])->name('current-team.update'); - - Route::get('/team-invitations/{invitation}', [TeamInvitationController::class, 'accept']) - ->middleware(['signed']) - ->name('team-invitations.accept'); - } + Route::get('/user/profile', [UserProfileController::class, 'show'])->name('profile.show'); + + Route::group(['middleware' => 'verified'], function () { + // API... + if (Jetstream::hasApiFeatures()) { + Route::get('/user/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); + } + + // Teams... + if (Jetstream::hasTeamFeatures()) { + Route::get('/teams/create', [TeamController::class, 'create'])->name('teams.create'); + Route::get('/teams/{team}', [TeamController::class, 'show'])->name('teams.show'); + Route::put('/current-team', [CurrentTeamController::class, 'update'])->name('current-team.update'); + + Route::get('/team-invitations/{invitation}', [TeamInvitationController::class, 'accept']) + ->middleware(['signed']) + ->name('team-invitations.accept'); + } + }); }); }); diff --git a/src/Http/Livewire/UpdateProfileInformationForm.php b/src/Http/Livewire/UpdateProfileInformationForm.php index ac913a66f..a2e461c5e 100644 --- a/src/Http/Livewire/UpdateProfileInformationForm.php +++ b/src/Http/Livewire/UpdateProfileInformationForm.php @@ -25,6 +25,13 @@ class UpdateProfileInformationForm extends Component */ public $photo; + /** + * Determine if the verification email was sent. + * + * @var bool + */ + public $verificationLinkSent = false; + /** * Prepare the component. * @@ -73,6 +80,18 @@ public function deleteProfilePhoto() $this->emit('refresh-navigation-menu'); } + /** + * Sent the email verification. + * + * @return void + */ + public function sendEmailVerification() + { + Auth::user()->sendEmailVerificationNotification(); + + $this->verificationLinkSent = true; + } + /** * Get the current user of the application. * diff --git a/stubs/inertia/resources/js/Pages/Auth/VerifyEmail.vue b/stubs/inertia/resources/js/Pages/Auth/VerifyEmail.vue index 58eddaac8..1398a1785 100644 --- a/stubs/inertia/resources/js/Pages/Auth/VerifyEmail.vue +++ b/stubs/inertia/resources/js/Pages/Auth/VerifyEmail.vue @@ -27,11 +27,11 @@ const verificationLinkSent = computed(() => props.status === 'verification-link-
- Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another. + Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.
- A new verification link has been sent to the email address you provided during registration. + A new verification link has been sent to the email address in your profile settings.
@@ -40,14 +40,23 @@ const verificationLinkSent = computed(() => props.status === 'verification-link- Resend Verification Email - - Log Out - +
+ + Edit Profile + + + + Log Out + +
diff --git a/stubs/inertia/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue b/stubs/inertia/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue index 314a10c2b..5770e514e 100644 --- a/stubs/inertia/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue +++ b/stubs/inertia/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue @@ -1,7 +1,7 @@