> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# E-mailverificatie (Email Verification)

> Leer stap voor stap hoe je de e-mailverificatie van Laravel implementeert. Je leert over het voorbereiden van het model, de drie routedefinities, de verified-middleware, aanpassingen en events.

## Introductie

E-mailverificatie (Email Verification) is een mechanisme dat controleert of een gebruiker daadwerkelijk eigenaar is van het geregistreerde e-mailadres. Laravel levert het versturen van de verificatiemail en de verificatieverwerking standaard mee, zodat je met minimale implementatie een veilige verificatieflow kunt bouwen.

<Info>
  Gebruik je een starter kit, dan zijn de authenticatieschermen en de e-mailverificatieflow al ingebouwd. Implementeer je handmatig, definieer dan zelf het model, de routes en de views volgens de stappen op deze pagina.
</Info>

## Model en database voorbereiden

### MustVerifyEmail implementeren

Controleer of `App\Models\User` de interface `Illuminate\Contracts\Auth\MustVerifyEmail` implementeert.

```php theme={null}
<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
}
```

Voeg je deze interface toe, dan wordt automatisch een verificatiemail verstuurd naar nieuw geregistreerde gebruikers. Implementeer je de registratie zonder starter kit, vuur dan na een geslaagde registratie het `Registered`-event af.

```php theme={null}
use Illuminate\Auth\Events\Registered;

event(new Registered($user));
```

### De kolom email\_verified\_at controleren

De tabel `users` heeft een kolom `email_verified_at` nodig. Deze zit doorgaans al in de standaardmigration `0001_01_01_000000_create_users_table.php`.

## Routing (drie routes)

Voor e-mailverificatie definieer je drie routes: `verification.notice`, `verification.verify` en `verification.send`.

<Steps>
  <Step title="Definieer de route voor de verificatiemelding (verification.notice)">
    Deze retourneert een scherm dat niet-geverifieerde gebruikers vraagt hun e-mail te controleren.

    ```php theme={null}
    Route::get('/email/verify', function () {
        return view('auth.verify-email');
    })->middleware('auth')->name('verification.notice');
    ```
  </Step>

  <Step title="Definieer de verificatiehandler-route (verification.verify)">
    Wanneer de gebruiker op de link in de e-mail klikt, wordt de ondertekende URL gevalideerd en de verificatie afgerond.

    ```php theme={null}
    use Illuminate\Foundation\Auth\EmailVerificationRequest;

    Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
        $request->fulfill();

        return redirect('/home');
    })->middleware(['auth', 'signed'])->name('verification.verify');
    ```
  </Step>

  <Step title="Definieer de route voor opnieuw versturen (verification.send)">
    Verstuurt de verificatiemail opnieuw wanneer de gebruiker deze is kwijtgeraakt.

    ```php theme={null}
    use Illuminate\Http\Request;

    Route::post('/email/verification-notification', function (Request $request) {
        $request->user()->sendEmailVerificationNotification();

        return back()->with('message', 'Verification link sent!');
    })->middleware(['auth', 'throttle:6,1'])->name('verification.send');
    ```
  </Step>
</Steps>

## Routes beschermen

Wil je alleen geverifieerde gebruikers toegang geven, gebruik dan de `verified`-middleware. Meestal combineer je die met `auth`.

```php theme={null}
Route::get('/profile', function () {
    // Alleen toegankelijk voor geverifieerde gebruikers
})->middleware(['auth', 'verified']);
```

Bezoekt een niet-geverifieerde gebruiker de route, dan stuurt Laravel die automatisch door naar `verification.notice`.

## Aanpassen

Om de inhoud van de verificatiemail aan te passen, stel je `VerifyEmail::toMailUsing` in binnen de `boot`-methode van de `AppServiceProvider`.

```php theme={null}
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;

public function boot(): void
{
    VerifyEmail::toMailUsing(function (object $notifiable, string $url) {
        return (new MailMessage)
            ->subject('Verify Email Address')
            ->line('Click the button below to verify your email address.')
            ->action('Verify Email Address', $url);
    });
}
```

## Events

Bij e-mailverificatie wordt het event `Illuminate\Auth\Events\Verified` afgevuurd. Bij starter kits wordt dit automatisch afgehandeld; bij handmatige implementatie voeg je waar nodig zelf eventverwerking toe.


## Related topics

- [Laravel Fortify en de starter kits](/nl/advanced/fortify.md)
- [Laravel Chisel — een bibliotheek voor post-installatiescripts van starter kits](/nl/blog/chisel-introduction.md)
- [Starter kits](/nl/starter-kits.md)
- [Introductie tot authenticatie](/nl/authentication.md)
- [E-mail versturen](/nl/mail.md)
