Zum Hauptinhalt springen

Einführung

Die E-Mail-Verifizierung (Email Verification) ist ein Mechanismus, um zu bestätigen, dass Ihre Nutzer die von ihnen registrierte E-Mail-Adresse tatsächlich besitzen. Laravel liefert das Versenden der Bestätigungs-E-Mail und deren Prüfung standardmäßig mit, sodass Sie mit minimalem Aufwand einen sicheren Verifizierungs-Flow aufbauen können.
Wenn Sie ein Starter Kit verwenden, sind Authentifizierungs-Screens und der E-Mail-Verifizierungs-Flow bereits integriert. Bei einer manuellen Implementierung definieren Sie Modell, Routen und Views nach den Schritten dieser Seite selbst.

Vorbereitung von Modell und Datenbank

MustVerifyEmail implementieren

Stellen Sie sicher, dass App\Models\User das Interface Illuminate\Contracts\Auth\MustVerifyEmail implementiert.
<?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;
}
Sobald Sie dieses Interface hinzufügen, wird an neu registrierte Benutzer automatisch eine Bestätigungs-E-Mail versendet. Wenn Sie die Registrierung ohne Starter Kit selbst implementieren, feuern Sie nach erfolgreicher Registrierung das Event Registered ab.
use Illuminate\Auth\Events\Registered;

event(new Registered($user));

Spalte email_verified_at prüfen

Die Tabelle users benötigt eine Spalte email_verified_at. Diese ist in der Regel bereits in der Standard-Migration 0001_01_01_000000_create_users_table.php enthalten.

Routing (drei Routen)

Für die E-Mail-Verifizierung definieren Sie drei Routen: verification.notice, verification.verify und verification.send.
1

Route für den Verifizierungshinweis definieren (verification.notice)

Zeigt nicht verifizierten Benutzern den Bildschirm „Bitte prüfen Sie Ihre E-Mail”.
Route::get('/email/verify', function () {
    return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');
2

Route für den Verifizierungs-Handler definieren (verification.verify)

Verifiziert die signierte URL, wenn der Benutzer auf den Link in der E-Mail klickt, und schließt die Bestätigung ab.
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');
3

Route für erneutes Versenden definieren (verification.send)

Sendet die Bestätigungs-E-Mail erneut, wenn der Nutzer sie verloren hat.
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');

Routen schützen

Um den Zugriff nur verifizierten Benutzern zu erlauben, verwenden Sie die Middleware verified. In der Regel kombinieren Sie sie mit auth.
Route::get('/profile', function () {
    // Nur für verifizierte Benutzer erreichbar
})->middleware(['auth', 'verified']);
Wenn ein nicht verifizierter Benutzer darauf zugreift, leitet Laravel automatisch auf verification.notice weiter.

Anpassung

Um den Text der Bestätigungs-E-Mail anzupassen, konfigurieren Sie VerifyEmail::toMailUsing in der boot-Methode Ihres AppServiceProvider.
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

Bei der E-Mail-Verifizierung wird das Event Illuminate\Auth\Events\Verified ausgelöst. In Starter Kits wird es automatisch behandelt; bei einer manuellen Implementierung ergänzen Sie die Event-Behandlung nach Bedarf.
Zuletzt geändert am 13. Juli 2026