Skip to content

Commit

Permalink
fix: Use Laravel's email verification request
Browse files Browse the repository at this point in the history
  • Loading branch information
danharrin committed Dec 22, 2023
1 parent 9ff0db6 commit 0ea6802
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
4 changes: 2 additions & 2 deletions packages/panels/routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@
->prefix('/email-verification')
->group(function () use ($panel) {
Route::get('/prompt', $panel->getEmailVerificationPromptRouteAction())->name('prompt');
Route::get('/verify', EmailVerificationController::class)
->middleware(['signed'])
Route::get('/verify/{id}/{hash}', EmailVerificationController::class)
->middleware(['signed', 'throttle:6,1'])
->name('verify');
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,13 @@
use Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse;
use Illuminate\Auth\Events\Verified;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\EmailVerificationRequest;

class EmailVerificationController
{
public function __invoke(): EmailVerificationResponse
public function __invoke(EmailVerificationRequest $request): EmailVerificationResponse
{
/** @var MustVerifyEmail $user */
$user = Filament::auth()->user();

if ((! $user->hasVerifiedEmail()) && $user->markEmailAsVerified()) {
event(new Verified($user));
}
$request->fulfill();

return app(EmailVerificationResponse::class);
}
Expand Down
21 changes: 21 additions & 0 deletions tests/src/Panels/Auth/EmailVerification/EmailVerificationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,24 @@
expect($userToVerify->refresh())
->hasVerifiedEmail()->toBeTrue();
});

it('cannot verify an email when signed in as another user', function () {
$userToVerify = User::factory()->create([
'email_verified_at' => null,
]);

$anotherUser = User::factory()->create([
'email_verified_at' => null,
]);

expect($anotherUser)
->hasVerifiedEmail()->toBeFalse();

$this
->actingAs($anotherUser)
->get(Filament::getVerifyEmailUrl($userToVerify))
->assertForbidden();

expect($anotherUser->refresh())
->hasVerifiedEmail()->toBeFalse();
});

0 comments on commit 0ea6802

Please sign in to comment.