Email

E-Mail-Authentifizierung in Laravel 11 mit Mailgun und Digital Ocean erstellen

Integrieren Sie Laravel Version 11.x in Mailgun, um die E-Mails von Nutzern verifizieren zu können. Lesen Sie unsere Schritt-für-Schritt-Anleitung.
Bild für E-Mail-Authentifizierung in Laravel 11 mit Mailgun und Digital Ocean erstellen

Mit der Einführung von Laravel Version 5.7 wurde eine neue Funktion zur Verifizierung von E-Mails von Nutzern eingeführt. Wenn Sie schon einmal php artisan make:auth in einer Laravel-App ausgeführt haben, kennen Sie sicher das großartige Gefühl, wenn Sie alle Ihre Registrierungs- und Anmeldeseiten mit Passwort-Hashing und einer bereits fertiggestellten Nutzertabelle vor sich sehen.

Diese Begeisterung legt sich jedoch schnell nach der Bereitstellung in der Produktionsumgebung, wenn Sie feststellen, dass sich jede Person mit garbage@notrealemail.com oder einer beliebigen anderen Eingabe registrieren kann. Diese dünne Schicht zur Sitzungsauthentifizierung ist in einer Live-Anwendung nicht sehr hilfreich. Die Einführung von MustVerifyEmailinterface in Laravel 5.7 erweiterte das Authentifizierungsgerüst, sodass sich Nutzer nur noch mit einer echten, gültigen E-Mail-Adresse anmelden können.

Es gab keine wesentlichen Änderungen an der Funktion zur E-Mail-Authentifizierung in Laravel – mittlerweile in Version 11 –, aber wir empfehlen, auf die neueste Version zu aktualisieren. falls Sie dies nicht bereits getan haben.

Laravel 11, das am 12. März 2024 veröffentlicht wurde, bietet weiterhin leistungsstarke Funktionen zur E-Mail-Verifizierung und führt gleichzeitig eine optimierte Anwendungsstruktur sowie weitere Verbesserungen ein. Dieses Tutorial führt Sie durch die Einrichtung der E-Mail-Authentifizierung in Laravel 11 mit Mailgun und die Bereitstellung auf Digital Ocean.

1. Die Mindestanforderung für PHP ist jetzt 8.2.

2. Es gibt eine optimierte Anwendungsstruktur mit einer überarbeiteten Datei bootstrap/app.php.

3. Standardmäßige Verwendung von SQLite für Datenbankspeicherung, Sitzungen, Cache und Warteschlangen.

4. Neue Health-Routing-Funktion für das Anwendungs-Monitoring.

Neue Laravel-Anwendung erstellen

Der erste Schritt besteht darin, eine neue Anwendung mit einigen Konfigurationen zu erstellen:

                                

                                    $ laravel new email-verification-example rnrn$ cd email-verification-example rnrn$ touch database/database.sqlite 
                                
                            

Dadurch wird die standardmäßige Laravel-11.x-App mit dem Authentifizierungsgerüst und einer Datei für eine SQLite-Datenbank erstellt. Aktualisieren Sie Ihre .env-Datei, damit sie auf den vollständigen Pfad der SQLite-Datei verweist:

                                

                                    DB_CONNECTION=sqlite rnDB_DATABASE=/full/path/to/email-verification-example/database/database.sqlite 
                                
                            

E-Mail-Verifizierung in Laravel 11

Sehen wir uns das standardmäßige Authentifizierungsgerüst an und prüfen, welche Änderungen erforderlich sind, um die E-Mail-Verifizierung hinzuzufügen.

Sehen Sie sich die Laravel-Dokumentation zur E-Mail-Validierung an hier.

In Laravel 11 bleibt der Prozess zum Hinzufügen der E-Mail-Verifizierung ähnlich, aber die Dateistruktur hat sich geändert. Öffnen Sie Ihre Datei bootstrap/app.php und stellen Sie sicher, dass sie Folgendes enthält: 

Implementieren Sie als Nächstes die MustVerifyEmail-Schnittstelle. Eine Schnittstelle in PHP gibt die Methoden an, die eine Klasse implementieren muss. Sie müssen verifizieren, dass Ihr AppModeIsUser den Vertrag IlluminateContractsAuthMustVerifyEmail implementiert:

Diese Schnittstelle erzwingt drei neue Methoden für unser Nutzermodell:

  • hasVerifiedEmail()
  • markEmailAsVerified()
  • sendEmailVerificationNotification()

Die Implementierung dieser Methoden finden Sie unter: vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php. Um eine Person als verifiziert zu markieren, benötigen wir in unserer Nutzertabelle eine Spalte email_verified_at, die bereits in unserer standardmäßigen Migration zur Erstellung von Nutzertabellen vorhanden ist:

                                

                                    Schema::create('users', function (Blueprint $table) { rn   $table->increments('id'); rn   $table->string('name'); rn   $table->string('email')->unique(); rn   $table->timestamp('email_verified_at')->nullable(); rn   $table->string('password'); rn   $table->rememberToken(); rn   $table->timestamps(); rn});
                                
                            

Führen Sie die Migrationen aus, um die Tabelle zu erstellen: php artisan migrate.

Aktualisieren Sie in der Datei routes/web.php die Authentifizierungsrouten, um die E-Mail-Verifizierung hinzuzufügen:

                                

                                    Auth::routes(['verify' => true]);
                                
                            

In Laravel 11 werden die Routen in der Datei bootstrap/app.php definiert. Stellen Sie sicher, dass Ihre Webrouten enthalten sind, und fügen Sie die Verifizierungsrouten hinzu: 

                                

                                    ->withRouting( rnrn    web: __DIR__.'/../routes/web.php', rnrn    commands: __DIR__.'/../routes/console.php', rnrn    health: '/up', rnrn) 
                                
                            

Fügen Sie dann in Ihrer Datei routes/web.php Folgendes hinzu: 

Um alle für Ihre Anwendung verfügbaren Routen anzuzeigen, führen Sie php artisan route:list aus. Das ist praktisch alles, was wir aufseiten von Laravel tun müssen, um E-Mails zu verifizieren. Wenn Sie es jetzt jedoch versuchen, wird es nicht funktionieren.

Laravel code

Bevor wir E-Mails über unseren PHP-Server versenden können, müssen wir einen E-Mail-Treiber in Laravel konfigurieren. Sie können dies jedoch überprüfen, indem Sie tinker verwenden, um zu sehen, dass ein Nutzereintrag mit einem email_verified_at-Wert von null erstellt wurde.

Hier kommt Mailgun ins Spiel

Mailgun bietet die Möglichkeit, E-Mails über einen SMTP-Server oder über die eigene API zu versenden. In diesem Tutorial versenden wir E-Mails über die Mailgun-API. Dies ist schneller, skaliert besser und erfordert weniger Aufwand bei der Einrichtung als die Konfiguration von SMTP.

Mailgun API call

Wir werden API-Aufrufe senden. Dafür benötigen wir Guzzle:

$ composer require guzzlehttp/guzzle

Damit unsere Anwendung E-Mails versenden kann, benötigen wir einen gehosteten Domainnamen. Ich habe einen Domainnamen, den ich über Google Domains für etwa 12 $/Jahr gekauft habe. Die Website (https://employbl.com/) wird auf Laravel Forge gegen eine monatliche Gebühr gehostet. Für die Bereitstellung habe ich den Laracasts-Kurs „Learn Laravel Forge“.

In diesem Kurs habe ich meine Laravel-Anwendung so eingerichtet, dass sie auf Digital Ocean Droplets ausgeführt wird. Dabei habe ich meinen Google-Domainnamen so konfiguriert, dass er auf Digital Ocean verweist.

Sobald Sie ein Mailgun-Konto erstellt haben, müssen Sie Ihre Domain verifizieren, was etwa 24 Stunden dauert. Dazu müssen wir TXT-, CNAME- und MX-Einträge hinzufügen.  Wenn die MX-Einträge bereits auf einen E-Mail-Anbieter verweisen, können Sie stattdessen eine Subdomain konfigurieren. Um diese Einträge zu finden, rufen Sie die Domain in Ihrem Mailgun-Konto auf und prüfen Sie Domain Verification & DNS. Sobald Sie eine funktionierende Mailgun-Domain haben, rufen Sie das Dashboard auf, um Ihren API-Schlüssel zu finden, und aktualisieren Sie die .env-Datei entsprechend.

MAIL_DRIVER=mailgun MAILGUN_DOMAIN=mg.YOUR_DOMAIN.com MAILGUN_SECRET=YOUR_KEY_HERE

Mehr erfahren: Laravel ist zu einer jährlichen Versionierung übergegangen. In der aktuellen V10 können Sie bis zum 6. August 2024 mit Fehlerbehebungen und bis zum 14. Februar 2025 mit Sicherheitsupdates rechnen. Lesen Sie die Versionshinweise zu Laravel 10.

Überprüfen, ob es funktioniert

Sobald der E-Mail-Versand konfiguriert ist, wird nach der Registrierung eine Landingpage angezeigt, auf der die Person aufgefordert wird, ihre E-Mails zu überprüfen. Diese Seite kann unter resources/views/auth/verify.blade.php geändert werden.

Verify your email Laravel

Dadurch wird eine echte E-Mail an die angegebene Adresse gesendet. Die Vorlage für diese E-Mail befindet sich in IlluminateAuthNotificationsVerifyEmail.php.

Laravel verify email address link

Wenn wir nicht möchten, dass unsere Verifizierungs-E-Mails „Regards“ oder den obigen Text enthalten, müssen wir diese anpassen. Veröffentlichen Sie die Standardvorlagen mit den unten stehenden Publish-Befehlen:

                                

                                    $ php artisan vendor:publish --tag=laravel-notificationsrn$ php artisan vendor:publish --tag=laravel-mail
                                
                            

Tragen Sie dann die neuen Standardwerte in resources/views/vendor/notifications/email.blade.php ein. Wenn Sie weitere Änderungen vornehmen möchten, können Sie die Benachrichtigung neu implementieren, indem Sie Ihrem Nutzermodell eine neue sendEmailVerificationNotification-Methode hinzufügen, die eine von Ihnen erstellte benutzerdefinierte Benachrichtigung zurückgibt.

Sobald auf den Link zur Verifizierung der E-Mail-Adresse geklickt wird, erfolgt die Weiterleitung zum Dashboard und die Anmeldung kann problemlos durchgeführt werden.

Laravel login

Damit sollten Sie startklar sein. Der schwierigste Teil bestand für mich darin, den E-Mail-Server und Mailgun zu konfigurieren. Nachdem Ihre Domain verifiziert und Mailgun komplett eingerichtet ist, erweist sich der Laravel-Teil als sehr unkompliziert.

Konnten Sie alles erfolgreich in Betrieb nehmen? Verwendet schon jemand diese Funktion in einer Produktionsumgebung? Kontaktieren Sie mich auf Twitter oder hinterlassen Sie unten einen Kommentar.

Ressourcen

Neben den oben genannten Links fand ich auch diese Tutorials sehr hilfreich.

Möchten Sie weitere Beiträge wie diesen von Mailgun lesen?

Unser Gastautor Connor Leech ist Software Engineer bei Stitch Labs. Sie können ihn per E-Mail kontaktieren. Für weitere Beiträge und Anleitungen zur Problemlösung abonnieren Sie unseren Newsletter. So verpassen Sie keine Einblicke unserer Gastfachleute und internen E-Mail-Geeks.