{"id":60607,"date":"2023-03-30T14:40:09","date_gmt":"2023-03-30T13:40:09","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=60607&#038;preview=true&#038;preview_id=60607"},"modified":"2025-09-01T16:51:43","modified_gmt":"2025-09-01T15:51:43","slug":"laravel-authentifizierung","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/","title":{"rendered":"Ein umfassender Leitfaden zur Laravel-Authentifizierung"},"content":{"rendered":"<p>Die Authentifizierung ist eine der kritischsten und wichtigsten Funktionen von Webanwendungen. Web-Frameworks wie Laravel bieten viele M\u00f6glichkeiten f\u00fcr die Authentifizierung von Nutzern.<\/p>\n<p>Du kannst die Authentifizierungsfunktionen von Laravel schnell und sicher implementieren. Eine mangelhafte Implementierung dieser Authentifizierungsfunktionen kann jedoch riskant sein, da b\u00f6swillige Parteien sie ausnutzen k\u00f6nnen.<\/p>\n<p>In diesem Leitfaden erf\u00e4hrst du alles, was du wissen musst, um mit den von dir gew\u00e4hlten Laravel-Authentifizierungsmethoden loszulegen.<\/p>\n<p>Los geht&#8217;s!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Eine Einf\u00fchrung in die Laravel-Authentifizierung<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-laravel\/\">Laravel<\/a> f\u00fchrt Module ein, die aus &#8222;W\u00e4chtern&#8220; und &#8222;<a href=\"https:\/\/laravel.com\/docs\/9.x\/providers\">Anbietern<\/a>&#8220; bestehen Guards legen die Benutzerauthentifizierung f\u00fcr jede Anfrage fest, und Provider definieren den Abruf von Benutzerdaten aus einem dauerhaften Speicher (z. B. einer <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mysql\/\">MySQL<\/a>-Datenbank).<\/p>\n<p>Wir legen unsere Authentifizierungsparameter in einer Datei namens <code>config\/auth.php<\/code> fest. Sie enth\u00e4lt mehrere Optionen, um das Authentifizierungsverhalten von Laravel zu optimieren und zu \u00e4ndern.<\/p>\n<p>Zuerst musst du die Authentifizierungsvorgaben festlegen. Diese Option steuert die Standardoptionen f\u00fcr die Authentifizierung und das Zur\u00fccksetzen von Passw\u00f6rtern in deiner Anwendung. Du kannst diese Voreinstellungen nach Bedarf \u00e4ndern, aber f\u00fcr die meisten Anwendungen sind sie ein perfekter Start.<\/p>\n<p>Als N\u00e4chstes legst du die Authentifizierungsgarantien f\u00fcr deine Anwendung fest. In unserer Standardkonfiguration verwenden wir den Sitzungsspeicher und den Eloquent User Provider. Alle Authentifizierungstreiber haben einen User Provider.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nreturn [\n    \/* \n    Defining Authentication Defaults  \n    *\/\n    \n    'defaults' =&gt; [\n        'guard' =&gt; 'web', \n        'passwords' =&gt; 'users',\n    ],\n    \n    \/*\n    Defining Authentication Guards\n   \n    Supported: \"session\"\n    *\/\n\n    'guards' =&gt; [\n        'web' =&gt; [\n            'driver' =&gt; 'session',\n            'provider' =&gt; 'users',\n        ],\n     ],\n    \n    \/*\n    Defining User Providers\n\n    Supported: \"database\", \"eloquent\"\n    *\/\n\n    'providers' =&gt; [\n        'users' =&gt; [\n             'driver' =&gt; 'eloquent',\n             'model' =&gt; App\\Models\\User::class,\n        ], \n\n        \/\/ 'users' =&gt; [\n        \/\/     'driver' =&gt; 'database',\n        \/\/     'table' =&gt; 'users',\n        \/\/ ],\n    ],\n\n    \/*\n    Defining Password Resetting\n    *\/\n\n    'passwords' =&gt; [\n        'users' =&gt; [\n            'provider' =&gt; 'users',\n            'table' =&gt; 'password_resets',\n            'expire' =&gt; 60,\n            'throttle' =&gt; 60,\n         ],\n     ],\n\n     \/*\n     Defining Password Confirmation Timeout\n     *\/\n\n    'password_timeout' =&gt; 10800,\n];<\/code><\/pre>\n<p>Sp\u00e4ter stellen wir sicher, dass alle Authentifizierungstreiber einen Benutzerprovider haben. Dieser legt fest, wie die Benutzer aus deiner Datenbank oder anderen Speichermechanismen abgerufen werden, um die Benutzerdaten zu erhalten. Du kannst mehrere Quellen f\u00fcr jedes Modell oder jede Tabelle konfigurieren, wenn du mehrere Benutzertabellen oder -modelle hast. Diese Quellen k\u00f6nnen allen zus\u00e4tzlichen Authentifizierungsgarden zugewiesen werden, die du definiert hast.<\/p>\n<p>Es kann auch sein, dass die Benutzer ihre Passw\u00f6rter zur\u00fccksetzen wollen. Hierf\u00fcr kannst du mehrere Konfigurationen f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern festlegen, wenn du mehr als eine Benutzertabelle oder ein Modell in der Anwendung hast und f\u00fcr die einzelnen Benutzertypen unterschiedliche Einstellungen vornehmen m\u00f6chtest. Die Ablaufzeit ist die Anzahl der Minuten, die jedes Reset-Token g\u00fcltig ist. Diese Sicherheitsfunktion sorgt daf\u00fcr, dass die Token kurzlebig sind, damit sie weniger Zeit haben, erraten zu werden. Du kannst dies nach Bedarf \u00e4ndern.<\/p>\n<p>Schlie\u00dflich musst du die Zeit festlegen, die vergeht, bevor eine Passwortbest\u00e4tigung abl\u00e4uft und der Nutzer aufgefordert wird, sein Passwort erneut \u00fcber den Best\u00e4tigungsbildschirm einzugeben. In der Standardeinstellung dauert die Zeit\u00fcberschreitung drei Stunden.<\/p>\n<h2>Arten von Laravel-Authentifizierungsmethoden<\/h2>\n<p>Es gibt nicht f\u00fcr jedes Szenario die perfekte Authentifizierungsmethode, aber wenn du sie kennst, kannst du bessere Entscheidungen treffen. Dies und wie sich Laravel mit den neuen Funktionen in <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-9\/\">Laravel 9<\/a> weiterentwickelt. Das macht unsere Arbeit als Entwickler viel einfacher, wenn wir die Authentifizierungsmethoden wechseln.<\/p>\n<h3>Passwortbasierte Authentifizierung<\/h3>\n<p>Diese rudiment\u00e4re Art der Benutzerauthentifizierung wird immer noch von Tausenden von Unternehmen genutzt, aber wenn man die aktuelle Entwicklung betrachtet, ist sie eindeutig veraltet.<\/p>\n<p>Die Anbieter m\u00fcssen komplexe Passw\u00f6rter durchsetzen und gleichzeitig daf\u00fcr sorgen, dass die Reibung f\u00fcr den Endnutzer m\u00f6glichst gering ist.<\/p>\n<p>Die Funktionsweise ist ziemlich einfach: Der Nutzer gibt seinen Namen und sein Passwort ein, und wenn die Datenbank eine \u00dcbereinstimmung zwischen diesen beiden Daten feststellt, entscheidet der Server, die Anfrage zu authentifizieren und dem Nutzer f\u00fcr eine bestimmte Zeit Zugang zu den Ressourcen zu gew\u00e4hren.<\/p>\n<h3>Token-basierte Authentifizierung<\/h3>\n<p>Bei dieser Methode erh\u00e4lt der\/die Nutzer\/in nach der \u00dcberpr\u00fcfung ein eindeutiges Token.<\/p>\n<p>Mit diesem Token kann der Nutzer nun auf die entsprechenden Ressourcen zugreifen. Die Berechtigung gilt so lange, bis das Token abl\u00e4uft.<\/p>\n<p>Solange der Token aktiv ist, muss der Nutzer weder einen Benutzernamen noch ein Passwort verwenden, aber wenn er einen neuen Token abruft, sind diese beiden erforderlich.<\/p>\n<p>Token werden heute in vielen Szenarien eingesetzt, da sie zustandslose Einheiten sind, die alle Authentifizierungsdaten enthalten.<\/p>\n<p>Die M\u00f6glichkeit, die Tokengenerierung von der Token\u00fcberpr\u00fcfung zu trennen, gibt den Anbietern viel Flexibilit\u00e4t.<\/p>\n<h3>Multi-Faktor-Authentifizierung<\/h3>\n<p>Wie der Name schon sagt, m\u00fcssen mindestens zwei Authentifizierungsfaktoren verwendet werden, um die Sicherheit zu erh\u00f6hen.<\/p>\n<p>Im Gegensatz zur <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-two-factor-authentication\/\">Zwei-Faktor-Authentifizierung<\/a>, bei der nur zwei Faktoren zum Einsatz kommen, kann diese Methode zwei, drei, vier und mehr Faktoren umfassen..<\/p>\n<p>Bei dieser Methode wird in der Regel ein Passwort verwendet, nach dem der\/die Nutzer\/in einen Verifizierungscode auf sein\/ihr Smartphone geschickt bekommt. Anbieter, die diese Methode einsetzen, sollten auf Fehlalarme und Netzwerkausf\u00e4lle achten, die bei einer schnellen Skalierung zu gro\u00dfen Problemen f\u00fchren k\u00f6nnen.<\/p>\n<h2>Wie man die Laravel-Authentifizierung implementiert<\/h2>\n<p>In diesem Abschnitt lernst du mehrere M\u00f6glichkeiten kennen, wie du die Nutzer deiner Anwendung authentifizieren kannst. F\u00fcr einige Bibliotheken wie Jetstream, Breeze und Socialite gibt es <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-tutorial\/\">kostenlose Tutorials<\/a>, die dir zeigen, wie du sie nutzen kannst.<\/p>\n<h3>Manuelle Authentifizierung<\/h3>\n<p>Beginne mit der Registrierung von Nutzern und der Erstellung der ben\u00f6tigten Routen in <code>routes\/web.php<\/code><strong>.<\/strong><\/p>\n<p>Wir werden zwei Routen erstellen, eine zum Anzeigen des Formulars und eine zur Registrierung:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-40fe64ed-1c3d-49de-b459-a996d597787c\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-ab2be1e4-97a6-4fa8-b344-6ccbe0262a03\" class=\"textannotation\">Http<\/span>\\Contrllers\\Auth\\RegisterController;\nuse Illuminate\\Support\\Facades\\Route;\n\n\/*\nWeb Routes \n\nRegister web routes for your app's RouteServiceProvider \nin a group containing the \"web\" middleware\n*\/\n\nRoute::get('\/register', [RegisterController::class], 'create']);\n\nRoute::post('\/register', [RegisterController::class], 'store']);<\/code><\/pre>\n<p>Und erstellen den daf\u00fcr ben\u00f6tigten Controller:<\/p>\n<pre><code class=\"language-bash\">php artisan make controller Auth\/RegisterController -r<\/code><\/pre>\n<p>Aktualisiere nun den Code wie folgt:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-8fc5223f-2d74-42c4-951c-6bf2d17e6555\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-13d87127-176a-4817-8b0f-8068b6811319\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-e83fe09a-e83c-412e-9f28-bc6bf7fcc7f3\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-2daba9db-788c-4d04-b9a6-b9aceb7f1df5\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-e025faa4-d153-45ac-94e5-2d6286b276c2\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-49e04037-6836-4ce9-8c31-eb027e7001c2\" class=\"textannotation\">Controller<\/span>;\nuse illuminate\\Htpp\\<span id=\"urn:enhancement-44244772-87ff-4c4d-81cd-4c52a59d5895\" class=\"textannotation\">Request<\/span>;\n\nclass RegisterController extends Controller\n{\n    public function create()\n    {\n        return view('auth.register');\n    }\n\n    public function store(Request $request)\n    {\n    }\n}<\/code><\/pre>\n<p>Der Controller ist jetzt leer und gibt einen View zum Registrieren zur\u00fcck. Wir erstellen diese Ansicht in <code>resources\/views\/auth<\/code> und nennen sie <code>register.blade.php<\/code>.<\/p>\n<figure style=\"width: 1968px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Laravel-Register-User.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Laravel-Register-User.png\" alt=\"Laravel-Blade-View f\u00fcr die Benutzerregistrierung.\" width=\"1968\" height=\"1862\"><\/a><figcaption class=\"wp-caption-text\">Laravel-Blade-Ansicht f\u00fcr die Benutzerregistrierung.<\/figcaption><\/figure>\n<p>Jetzt, wo alles eingerichtet ist, sollten wir unsere <code>\/register<\/code> Route besuchen und das folgende Formular sehen:<\/p>\n<figure id=\"attachment_162747\" aria-describedby=\"caption-attachment-162747\" style=\"width: 960px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-162747 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-authentication-user-login-form.png\" alt=\"Anmeldung f\u00fcr die manuelle Authentifizierung.\" width=\"960\" height=\"264\"><figcaption id=\"caption-attachment-162747\" class=\"wp-caption-text\">Anmeldung f\u00fcr die manuelle Authentifizierung.<\/figcaption><\/figure>\n<p>Da wir nun ein Formular anzeigen k\u00f6nnen, das ein Nutzer ausf\u00fcllen kann, und die Daten daf\u00fcr erhalten, sollten wir die Daten des Nutzers abrufen, validieren und dann in der Datenbank speichern, wenn alles in Ordnung ist. Hier solltest du eine Datenbanktransaktion verwenden, um sicherzustellen, dass die Daten, die du einf\u00fcgst, vollst\u00e4ndig sind.<\/p>\n<p>Wir werden die Anfragevalidierung von Laravel nutzen, um sicherzustellen, dass alle drei Anmeldedaten erforderlich sind. Wir m\u00fcssen sicherstellen, dass die E-Mail ein E-Mail-Format hat und in der Tabelle <code>users<\/code> eindeutig ist und dass das Passwort best\u00e4tigt ist und mindestens 8 Zeichen hat:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-4ff21c5c-0495-4581-ab24-d5559ab108a9\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-696e32ca-2a56-4fbf-bb98-bb155f642212\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-74d6cc86-d881-48cb-b065-ec45d0d9a342\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-7a83a2e1-7bdc-4e01-b733-d7d429b8e6ff\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-499bf04d-449e-477b-9b37-647ea3a98e30\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-6cc97b30-4946-43b2-bda3-d6ec38f739f7\" class=\"textannotation\">Controller<\/span>;\nuse Illuminate\\Foundation\\Auth\\<span id=\"urn:enhancement-877c9dca-151e-44c9-a7e7-a246d67c07db\" class=\"textannotation\">User<\/span>;\nuse Illuminate\\<span id=\"urn:enhancement-950d34c7-718f-41fe-918b-1d6348c955a6\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-31820aa4-da11-4e67-8d90-6dd86203e6be\" class=\"textannotation\">Request<\/span>;\nuse Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-9a7dce8d-b900-42ba-8bfc-bfeb6000ffc5\" class=\"textannotation\">Hash<\/span>;\n\nclass RegisterController extends Controller\n{\n    public function store(Request $request)\n    {\n        \/* \n        Validation\n        *\/\n        $request-&gt;validate([\n            'name' =&gt; 'required',\n            'email' =&gt; 'required|email|unique:users',\n            'password' =&gt; 'required|confirmed|min:8',\n        ]);\n\n        \/*\n        Database Insert\n        *\/\n        $user = User:;create([\n            'name' =&gt; $request-&gt;name,\n            'email' =&gt; $request-&gt;email,\n            'password' =&gt; Hash::make($request-&gt;password),\n        ]);\n\n        return back();\n    }\n\n    public function create()\n    {\n        return view('auth.register');\n    }\n}<\/code><\/pre>\n<p>Da unsere Eingaben nun validiert sind, wird alles, was gegen unsere Validierung verst\u00f6\u00dft, einen Fehler ausl\u00f6sen, der im Formular angezeigt wird:<\/p>\n<figure id=\"attachment_162751\" aria-describedby=\"caption-attachment-162751\" style=\"width: 960px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-162751 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-authentication-invalid-register-input.png\" alt=\"Beispiel f\u00fcr eine ung\u00fcltige Eingabe bei der Registrierung\" width=\"960\" height=\"168\"><figcaption id=\"caption-attachment-162751\" class=\"wp-caption-text\">Beispiel f\u00fcr eine ung\u00fcltige Eingabe bei der Registrierung<\/figcaption><\/figure>\n<p>Angenommen, wir haben in der Methode <code>store<\/code> ein Benutzerkonto erstellt, wollen wir den Benutzer auch anmelden. Es gibt zwei M\u00f6glichkeiten, wie wir das tun k\u00f6nnen. Wir k\u00f6nnen es manuell tun oder die <strong>Auth-Fassade<\/strong> verwenden.<\/p>\n<p>Nachdem sich der Nutzer angemeldet hat, sollten wir ihn nicht auf den Registrierungsbildschirm zur\u00fcckbringen, sondern auf eine neue Seite, z. B. ein Dashboard oder eine Homepage. Genau das werden wir hier tun:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-8c582910-9390-425d-afe2-0621ed19d88e\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-fb43e274-6e83-4549-bd61-3a749a0d099e\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-ced89871-89c4-41cc-a803-a34dca7030ce\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-8cbabf7c-ffd2-4099-bfc8-2f2f93142498\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-ea1fac4a-3b86-4039-8629-a3bd8e757906\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-321ab988-d79c-48eb-a2d5-9b3be92bfeb6\" class=\"textannotation\">Controller<\/span>;\nuse <span id=\"urn:enhancement-b362d09c-a310-41a7-85b2-cda69eb9e568\" class=\"textannotation\">App<\/span>\\Providers\\RouteServiceProvider;\nuse Illuminate\\Foundation\\Auth\\<span id=\"urn:enhancement-64f08584-2a87-4973-9943-dd083117cd0c\" class=\"textannotation\">User<\/span>;\nuse Illuminate\\<span id=\"urn:enhancement-6b4e8a9a-5489-48f8-9a48-29d1d750a413\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-58e9f72b-495e-4227-9bf0-b0f6262da915\" class=\"textannotation\">Request<\/span>;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-479751f4-1efb-44be-86a7-0b61c29e25d7\" class=\"textannotation\">Hash<\/span>;\n\nclass RegisterController extends Controller\n{\n    public function store(Request $request)\n    {\n        \/* \n        Validation\n        *\/\n        $request-&gt;validate([\n            'name' =&gt; 'required',\n            'email' =&gt; 'required|email|unique:users',\n            'password' =&gt; 'required|confirmed|min:8',\n        ]);\n\n        \/*\n        Database Insert\n        *\/\n        $user = User:;create([\n            'name' =&gt; $request-&gt;name,\n            'email' =&gt; $request-&gt;email,\n            'password' =&gt; Hash::make($request-&gt;password),\n        ]);\n\n        Auth::login($user):\n\n        return redirect(RouteServiceProvider::HOME);\n    }\n\n    public function create()\n    {\n        return view('auth.register');\n    }\n}<\/code><\/pre>\n<p>Jetzt, wo ein Nutzer registriert und angemeldet ist <code>-n<\/code>, sollten wir daf\u00fcr sorgen, dass er sich sicher abmelden kann.<\/p>\n<p>Laravel schl\u00e4gt vor, die Sitzung ung\u00fcltig zu machen und das Token zur Sicherheit nach einer Abmeldung neu zu generieren. Und genau das werden wir jetzt tun. Wir beginnen damit, eine neue <code>\/logout<\/code> Route zu erstellen, indem wir die <code>destroy<\/code> Methode <strong>des LogoutControllers <\/strong> verwenden:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-e88beeb1-1fe4-4582-addc-8754183d09eb\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-df6ae7df-3805-4f32-b7f5-f4d9d7241081\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth\\RegisterController;\nuse <span id=\"urn:enhancement-8b460582-8047-4920-a7e3-196782ca9f19\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-47182bd7-62b1-43f1-9ece-2c9aa17981a2\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth\\LogoutController;\nuse Illuminate\\Support\\Facades\\Route;\n\n\/*\nWeb Routes\n\nHere is where you can register web routes for your application. These\nroutes are loaded by the RrouteServiceProvider with a group which\ncontains the \"web\" middleware group. Now create something great!\n*\/\n\nRoute::get('\/register', [RegisterController::class, 'create']);\n\nRoute::post('\/register', [RegisterController::class, 'store']);\n\nRoute::post('\/logout', [Logoutcontroller::class, 'destroy'])\n    -&gt;middleware('auth');<\/code><\/pre>\n<p>Die Weiterleitung des Logouts durch die <code>auth<\/code>-Middleware ist sehr wichtig. Die Nutzer sollen nicht auf die Route zugreifen k\u00f6nnen, wenn sie nicht angemeldet sind.<\/p>\n<p>Erstelle nun einen Controller, wie wir es zuvor getan haben:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller Auth\/LogoutController -r<\/code><\/pre>\n<p>Wir k\u00f6nnen sicherstellen, dass wir die Anfrage als Parameter in der Methode <code>destroy<\/code> erhalten. Wir melden den Benutzer \u00fcber die Auth-Fassade ab, machen die Sitzung ung\u00fcltig, generieren das Token neu und leiten den Benutzer zur Homepage weiter:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-61843f53-4c4a-4498-b65e-8bb9d2ef4f9f\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-405c89a3-f993-4e5b-ac9b-e6b057a21599\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-28a472a2-96db-41a2-ae4f-d5e05326d116\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-c90fa6a3-6433-4189-8fc1-3006f0d327f5\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-5937a92f-9b6d-4258-b679-9b847973aed4\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-6d7f1fb9-5bbd-4648-93a1-fc491cbeda67\" class=\"textannotation\">Controller<\/span>;\nuse Illuminate\\<span id=\"urn:enhancement-5dfb83cd-c49e-444d-b1e1-9d640a706c8d\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-442fdf38-9441-4112-a033-863a0893b31f\" class=\"textannotation\">Request<\/span>;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass LogoutController extends Controller\n{\n    public function destroy(Request $request)\n    { \n        Auth::logout();\n\n        $request-&gt;session()-&gt;invalidate();\n\n        $request-&gt;session()-&gt;regenerateToken();\n \n        return redirect('\/');\n     }\n}<\/code><\/pre>\n<h3>Erinnerung an den Benutzer<\/h3>\n<p>Die meisten, wenn nicht sogar alle, modernen Webanwendungen bieten in ihrem Anmeldeformular ein Kontrollk\u00e4stchen zur Erinnerung an den Benutzer.<\/p>\n<p>Wenn wir eine Erinnerungsfunktion anbieten wollen, k\u00f6nnen wir einen booleschen Wert als zweites Argument an die Methode attempt \u00fcbergeben.<\/p>\n<p>Wenn dieser Wert g\u00fcltig ist, beh\u00e4lt Laravel den Benutzer auf unbestimmte Zeit oder so lange, bis er manuell abgemeldet wird, authentifiziert. Die Benutzertabelle muss die Spalte <code>remember_token<\/code> enthalten (deshalb werden die Token neu generiert), in der wir unser &#8222;Remember me&#8220;-Token speichern.<\/p>\n<p>In der Standardmigration f\u00fcr Benutzer ist sie bereits enthalten.<\/p>\n<p>Als Erstes musst du das Feld &#8222;<strong>Remember Me<\/strong>&#8220; zu deinem Formular hinzuf\u00fcgen:<\/p>\n<figure style=\"width: 1396px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/RememberMe.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/RememberMe.png\" alt=\"Remember Me-Feld\" width=\"1396\" height=\"596\"><\/a><figcaption class=\"wp-caption-text\">Hinzuf\u00fcgen des Remember Me-Feldes von.<\/figcaption><\/figure>\n<p>Danach holst du dir die Anmeldedaten aus der Anfrage und verwendest sie in der Methode attempt der Auth-Fassade.<\/p>\n<p>Wenn der Benutzer erinnert werden soll, loggen wir ihn ein und leiten ihn auf unsere Homepage um. Andernfalls geben wir eine Fehlermeldung aus:<\/p>\n<pre><code class=\"language-php\">public function store(Request $request)\n{\n    $credentials = $request-&gt;only('email', 'password');\n\n    if (Auth::attempt($credentials, $request-&gt;filled('remember'))) {\n        $request-&gt;session()-&gt;regenerate();\n\n        return redirect()-&gt;intended('\/');\n    }\n\n    return back()-&gt;withErrors([\n        'email' =&gt; 'The provided credentials do not match our records.',\n    ]);\n}<\/code><\/pre>\n<h3>Passw\u00f6rter zur\u00fccksetzen<\/h3>\n<p>Die meisten Webanwendungen bieten heute die M\u00f6glichkeit, Passw\u00f6rter zur\u00fcckzusetzen.<\/p>\n<p>Wir erstellen eine weitere Route f\u00fcr das vergessene Passwort und erstellen den Controller wie zuvor. Au\u00dferdem f\u00fcgen wir eine Route f\u00fcr den Link zum Zur\u00fccksetzen des Passworts hinzu, die das Token f\u00fcr den gesamten Prozess enth\u00e4lt:<\/p>\n<pre><code class=\"language-php\">Route::post('\/forgot-password', [ForgotPasswordLinkController::class, 'store']);\n\nRoute::post('\/forgot-password\/{token}', [ForgotPasswordController::class, 'reset']);<\/code><\/pre>\n<p>In der Store-Methode nehmen wir die E-Mail aus der Anfrage und validieren sie, wie wir es bereits getan haben.<\/p>\n<p>Danach k\u00f6nnen wir die Methode <code>sendResetLink<\/code> aus der Passwort-Fassade verwenden.<\/p>\n<p>Und dann wollen wir als Antwort den Status zur\u00fcckgeben, wenn der Link erfolgreich gesendet wurde, oder andernfalls einen Fehler:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-7f621e2e-5a17-48ba-82ee-1cbb9ad8b7f8\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-4dd4ae20-67fd-43f9-9fb9-7c6f2bb89785\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-b77849d0-7225-4c39-a093-44e6041e3054\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-4e6460e0-b53e-466e-a453-742a0757acb5\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-ff115972-abaa-4ab8-977e-87dcc33ffd62\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-16a69eb8-84af-456d-97bb-5a57658e59e8\" class=\"textannotation\">Controller<\/span>;\nuse Illuminate\\<span id=\"urn:enhancement-f01bb088-9463-40aa-bb0b-daa2fca7543c\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-dc25aba2-4f4c-4b53-9710-b5c4b5127d1f\" class=\"textannotation\">Request<\/span>;\nuse Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-665bb57f-8cdb-438f-a321-b2fe0fad21d3\" class=\"textannotation\">Password<\/span>;\n\nclass ForgotPasswordLinkController extends Controller\n{\n    public function reset(Request $request)\n    {\n        $request-&gt;validate([\n             'email' =&gt; 'required|email',\n        ]);\n\n        $status = Password::sendResetLink(\n            $request-&gt;only('email');\n        );\n\n        return $status === Password::RESET_LINK_SENT\n            ? back()-&gt;with('status', __($status))\n            : back()-&gt;withInput($request-&gt;only('email'))-&gt;withErrors(['email' =&gt; __($status)]);\n     }\n}<\/code><\/pre>\n<p>Nachdem der Link zum Zur\u00fccksetzen des Passworts an die E-Mail des Nutzers gesendet wurde, sollten wir uns um die Logik k\u00fcmmern, was danach passiert.<\/p>\n<p>Wir erhalten das Token, die E-Mail und das neue Passwort in der Anfrage und \u00fcberpr\u00fcfen sie.<\/p>\n<p>Danach k\u00f6nnen wir die Reset-Methode der Passwort-Fassade verwenden, damit Laravel sich um alles andere im Hintergrund k\u00fcmmert.<\/p>\n<p>Wir werden das Passwort immer mit einem Hash versehen, um es sicher zu machen.<\/p>\n<p>Am Ende pr\u00fcfen wir, ob das Passwort zur\u00fcckgesetzt wurde. Wenn ja, leiten wir den Benutzer mit einer Erfolgsmeldung zum Anmeldebildschirm weiter. Andernfalls zeigen wir eine Fehlermeldung an, dass es nicht zur\u00fcckgesetzt werden konnte:<\/p>\n<pre><code class=\"language-php\"><span id=\"urn:enhancement-5cbc1efd-f5f6-4e7b-91db-5b6a512502c9\" class=\"textannotation\">namespace<\/span> <span id=\"urn:enhancement-657048f9-17e5-40c7-894e-e2c1ed9399c4\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-83403aaf-4d60-48df-bc8c-306884c18352\" class=\"textannotation\">Http<\/span>\\Controllers\\Auth;\n\nuse <span id=\"urn:enhancement-72a68df1-c285-4c7b-ac68-fe088736dd1a\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-7830dd5b-7583-48bc-a40d-7e54f6310f6b\" class=\"textannotation\">Http<\/span>\\Controllers\\<span id=\"urn:enhancement-63ebff4a-7de3-44c4-b24c-2729427c00f6\" class=\"textannotation\">Controller<\/span>;\nuse Illuminate\\<span id=\"urn:enhancement-acce41d4-5fdb-4614-bdaf-7b839360aa25\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-d2fa1668-89e4-412a-8034-cddd4974597e\" class=\"textannotation\">Request<\/span>;\nuse Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-5df4d03e-14d4-4149-a958-e484db0e55d4\" class=\"textannotation\">Hash<\/span>;\nuse Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-f6d98947-a651-4167-89e0-bc95ba382a7d\" class=\"textannotation\">Password<\/span>;\nuse Illuminate\\Support\\Str;\n\nclass ForgotPasswordController extends Controller\n{\n    public function store(Request $request)\n    {\n        $request-&gt;validate([\n            'token' =&gt; 'required',\n            'email' =&gt; 'required|email',\n            'password' =&gt; 'required|string|confirmed|min:8',\n        ]);\n\n        $status = Password::reset(\n            $request-&gt;only('email', 'password', 'password_confirmation', 'token'),\n            function ($user) use ($request) {\n                $user-&gt;forceFill(\n                    'password' =&gt; Hash::make($request-&gt;password),\n                    'remember_token' =&gt; Str::random(60)\n                ])-&gt;save();\n            }\n        );\n\n        return $status == Password::PASSWORD_RESET\n            ? redirect()-&gt;route('login')-&gt;with('status', __($status))\n            : back()-&gt;withInput($request-&gt;only('email'))-&gt;withErrors(['email' =&gt; __($status)]);\n    }\n}<\/code><\/pre>\n<h2>Laravel Breeze<\/h2>\n<p>Laravel Breeze ist eine einfache Implementierung der Laravel-Authentifizierungsfunktionen: Anmeldung, Registrierung, Passwortzur\u00fccksetzung, E-Mail-Verifizierung und Passwortbest\u00e4tigung. Du kannst es verwenden, um die Authentifizierung in deiner neuen Laravel-Anwendung zu implementieren.<\/p>\n<h3>Installation und Einrichtung<\/h3>\n<p>Nachdem du deine Laravel-Anwendung erstellt hast, musst du nur noch deine Datenbank konfigurieren, deine Migrationen durchf\u00fchren und das Paket laravel\/breeze \u00fcber Composer installieren:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/breeze \u2013dev<\/code><\/pre>\n<p>Danach f\u00fchrst du Folgendes aus:<\/p>\n<pre><code class=\"language-bash\">php artisan breeze:install<\/code><\/pre>\n<p>Dadurch werden deine Authentifizierungsansichten, -routen, -controller und andere Ressourcen, die es verwendet, ver\u00f6ffentlicht. Nach diesem Schritt hast du die vollst\u00e4ndige Kontrolle \u00fcber alles, was Breeze bietet.<\/p>\n<p>Jetzt m\u00fcssen wir unsere Anwendung auf dem Frontend rendern, also installieren wir unsere JS-Abh\u00e4ngigkeiten (die @vite verwenden):<\/p>\n<pre><code class=\"language-php\">npm install<\/code><\/pre>\n<p>:<\/p>\n<pre><code class=\"language-php\">npm run dev<\/code><\/pre>\n<p>Danach sollten die Links zum Anmelden und Registrieren auf deiner Homepage zu finden sein und alles sollte reibungslos funktionieren.<\/p>\n<h2>Laravel Jetstream<\/h2>\n<p>Laravel Jetstream erweitert Laravel Breeze um n\u00fctzliche Funktionen und andere Frontend-Stacks.<\/p>\n<p>Es bietet Login, Registrierung, E-Mail-Verifizierung, <a href=\"https:\/\/www.google.com\/url?q=https:\/\/kinsta.com\/blog\/wordpress-two-factor-authentication\/&#038;sa=D&#038;source=editors&#038;ust=1665232246657389&#038;usg=AOvVaw0_jXtwBiKx5qxPlTHGGCXc\">Zwei-Faktor-Authentifizierung<\/a>, Sitzungsmanagement, API-Unterst\u00fctzung \u00fcber Sanctum und optionales Team-Management.<\/p>\n<p>Bei der Installation von Jetstream musst du im Frontend zwischen Livewire und Inertia w\u00e4hlen. Im Backend wird Laravel Fortify verwendet, ein frontend-unabh\u00e4ngiges, &#8222;headless&#8220; Authentifizierungs-Backend f\u00fcr Laravel.<\/p>\n<h3>Installation und Einrichtung<\/h3>\n<p>Wir werden es \u00fcber Composer in unserem Laravel-Projekt installieren:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/jetstream<\/code><\/pre>\n<p>Danach f\u00fchren wir den Befehl <code>php artisan jetstream:install [stack]<\/code> aus, der die Argumente <code>[stack]<\/code> <code>Livewire<\/code> oder <code>Inertia<\/code> akzeptiert. Du kannst die Option <code>\u2013team<\/code> \u00fcbergeben, um die Teamfunktion zu aktivieren.<\/p>\n<p>Dadurch wird auch Pest <a href=\"https:\/\/www.google.com\/url?q=https:\/\/kinsta.com\/blog\/scripting-languages\/&#038;sa=D&#038;source=editors&#038;ust=1665232246659068&#038;usg=AOvVaw0OuP24kCNOrcZIHp8-2y_A\">PHP<\/a> zum Testen installiert.<\/p>\n<p>Zum Schluss m\u00fcssen wir das Frontend unserer Anwendung mit folgendem Befehl rendern:<\/p>\n<pre><code class=\"language-php\">npm install\nnpm run dev<\/code><\/pre>\n<h2>Laravel Fortify<\/h2>\n<p>Laravel Fortify ist eine Backend-Authentifizierungs-Implementierung, die nicht an das Frontend gebunden ist. Du musst Laravel Fortify nicht verwenden, um die Authentifizierungsfunktionen von Laravel zu implementieren.<\/p>\n<p>Es wird auch in Starter Kits wie Breeze und Jetstream verwendet. Du kannst Fortify auch eigenst\u00e4ndig verwenden, was nur eine Backend-Implementierung ist. Wenn du es allein verwendest, muss dein Frontend die Fortify-Routen aufrufen.<\/p>\n<h3>Installation und Einrichtung<\/h3>\n<p>Wir k\u00f6nnen Fortify \u00fcber Composer installieren:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/fortify<\/code><\/pre>\n<p>Jetzt m\u00fcssen wir die Ressourcen von Fortify ver\u00f6ffentlichen:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish \u2013provider=\"LaravelFortifyFortifyServiceProvider\"<\/code><\/pre>\n<p>Danach erstellen wir ein neues <strong>App\/Actions<\/strong>-Verzeichnis sowie den neuen <strong>FortifyServiceProvider<\/strong>, die Konfigurationsdatei und die Datenbankmigrationen.<\/p>\n<p>Zum Schluss f\u00fchrst du aus:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<p>Oder:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh<\/code><\/pre>\n<p>Und schon ist dein Fortify einsatzbereit.<\/p>\n<h2>Laravel Socialite<\/h2>\n<p>Laravel enth\u00e4lt eine einfache OAuth-basierte Benutzerauthentifizierungsfunktion. Sie unterst\u00fctzt soziale Logins \u00fcber Facebook, <a href=\"https:\/\/kinsta.com\/de\/blog\/twitter-statistiken\/\">Twitter<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/linkedin-statistiken\/\">LinkedIn<\/a>, Google, <a href=\"https:\/\/kinsta.com\/de\/blog\/git-fuer-die-webentwicklung\/\">Bitbucket, GitHub und GitLab<\/a>.<\/p>\n<h3>Installation<\/h3>\n<p>Wir k\u00f6nnen es \u00fcber Composer installieren:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/socialite<\/code><\/pre>\n<h3>Einrichtung und Nutzung<\/h3>\n<p>Nach der Installation m\u00fcssen wir die Anmeldedaten f\u00fcr den OAuth-Anbieter hinzuf\u00fcgen, den unsere Anwendung verwendet. Wir f\u00fcgen sie in <strong>config\/services.php<\/strong> f\u00fcr jeden Dienst hinzu.<\/p>\n<p>In der Konfiguration sollten wir den Schl\u00fcssel mit den vorherigen Diensten abgleichen. Einige dieser Schl\u00fcssel sind:<\/p>\n<ul>\n<li>facebook<\/li>\n<li>twitter (f\u00fcr OAuth 1.0)<\/li>\n<li>twitter-oauth-2 (f\u00fcr OAuth 2.0)<\/li>\n<li>linkedin<\/li>\n<li>google<\/li>\n<li>github<\/li>\n<li>gitlab<\/li>\n<li>bitbucket<\/li>\n<\/ul>\n<p>Eine Dienstkonfiguration kann wie folgt aussehen:<\/p>\n<pre><code class=\"language-php\">'google' =&gt; [\n    'client_id' =&gt; env(\"GOOGLE_CLIENT_ID\"),\n    'client_secret' =&gt; env(\"GOOGLE_CLIENT_SECRET\"),\n    'redirect' =&gt; \"http:\/\/example.com\/callback-url\",\n],<\/code><\/pre>\n<h3>Benutzer authentifizieren<\/h3>\n<p>F\u00fcr diese Aktion ben\u00f6tigen wir zwei Routen, eine f\u00fcr die Weiterleitung des Nutzers zum OAuth-Anbieter:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-9a2bff59-c953-4b9e-b7a0-f7276783ae56\" class=\"textannotation\">Laravel<\/span>\\Socialite\\Facades\\Sociliate;\n\nRoute::get('\/auth\/redirect', function () {\n    return Socialite:;driver('google')-&gt;redirect();\n});<\/code><\/pre>\n<p>Und eine f\u00fcr den Callback vom Anbieter nach der Authentifizierung:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-64698c00-82a7-4d5b-a83f-7b83d23a0be1\" class=\"textannotation\">Laravel<\/span>\\Socialite\\Facades\\Socialite;\n\nRoute:;get('\/auht\/callback', function () {\n    $user = Socialite:;driver('google')-&gt;user();\n\n    \/\/ Getting the user data\n    $user-&gt;token;\n});<\/code><\/pre>\n<p>Socialite stellt die Redirect-Methode zur Verf\u00fcgung, und die Fassade leitet den Nutzer zum OAuth-Anbieter weiter, w\u00e4hrend die User-Methode die eingehende Anfrage untersucht und die Nutzerinformationen abruft.<\/p>\n<p>Nachdem wir unseren Benutzer erhalten haben, m\u00fcssen wir pr\u00fcfen, ob er in unserer Datenbank existiert und ihn authentifizieren. Wenn er nicht existiert, legen wir einen neuen Datensatz an, um den Benutzer zu repr\u00e4sentieren:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-73c18c0e-3f7a-447c-b770-8e5393eba042\" class=\"textannotation\">App<\/span>\\Models\\<span id=\"urn:enhancement-6f8145c6-f661-4c3a-9e49-d093b780c4a8\" class=\"textannotation\">User<\/span>;\nuse Illuminate\\Support\\Facades\\Auth;\nuse <span id=\"urn:enhancement-9c48e92a-9ee0-47da-8737-caed902e75c1\" class=\"textannotation\">Laravel<\/span>\\Socialite\\Facades\\Socialite;\n\nRoute::get('\/auth\/callback', function () {\n   \/*\n   Get the user\n   *\/\n   $googleUser = Socialite::driver('google')-&gt;user();\n   \n   \/*\n   Create the user if it does not exist\n   Update the user if it exists\n   \n   Check for google_id in database\n   *\/\n   $user = User::updateOrCreate([\n       'google_id' =&gt; $googleUser-&gt;id,\n   ], [\n       'name' =&gt; $googleUser-&gt;name,\n       'email' =&gt; $googleUser-&gt;email,\n       'google_token' =&gt; $googleUser-&gt;token,\n       'google_refresh_token' =&gt; $googleUser-&gt;refreshToken,\n   ]);\n\n   \/*\n   Authenticates the user using the Auth facade\n   *\/\n    Auth::login($user);\n   \n    return redirect('\/dashboard');\n});<\/code><\/pre>\n<p>Wenn wir die Zugriffsbereiche des Benutzers einschr\u00e4nken wollen, k\u00f6nnen wir die Methode <code>scopes<\/code> verwenden, die wir der Authentifizierungsanfrage beif\u00fcgen. Dadurch werden alle zuvor angegebenen Bereiche mit den angegebenen zusammengef\u00fchrt.<\/p>\n<p>Eine Alternative dazu ist die Methode <code>setScopes<\/code>, die alle anderen bestehenden Bereiche \u00fcberschreibt:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-28276c1b-7206-4c26-86b8-37e4ec2d2853\" class=\"textannotation\">Laravel<\/span>\\Socialite\\Facades\\Socialite;\n\nreturn Socialite::driver('google')\n    -&gt;scopes(['read:user', 'write:user', 'public_repo'])\n    -&gt;redirect();\n\nreturn Socialite::driver('google')\n    -&gt;setScopes(['read:user', 'public_repo')\n    -&gt;redirect();<\/code><\/pre>\n<p>Jetzt, wo wir alles wissen und wissen, wie wir einen Benutzer nach dem Callback bekommen, schauen wir uns einige der Daten an, die wir von ihm bekommen k\u00f6nnen.<\/p>\n<p>OAuth1 User hat <code>token<\/code> und <code>tokenSecret<\/code>:<\/p>\n<pre><code class=\"language-php\">$user = Socialite::driver('google')-&gt;user();\n\n$token = $user-&gt;token;\n$tokenSecret = $user-&gt;tokenSecret;<\/code><\/pre>\n<p>OAuth2 liefert <code>token<\/code>, <code>refreshToken<\/code> und <code>expiresIn<\/code>:<\/p>\n<pre><code class=\"language-php\">$user = Socialite::driver('google')-&gt;user();\n\n$token = $user-&gt;token;\n$refreshToken = $user-&gt;refreshToken;\n$expiresIn = $user-&gt;expiresIn;<\/code><\/pre>\n<p>Sowohl OAuth1 als auch OAuth2 bieten <code>getId<\/code>, <code>getNickname<\/code>, <code>getName<\/code>, <code>getEmail<\/code>, und <code>getAvatar<\/code>:<\/p>\n<pre><code class=\"language-php\">$user = Socialite::driver('google')-&gt;user();\n\n$user-&gt;getId();\n$user-&gt;getNickName();\n$user-&gt;getName();\n$user-&gt;getEmail();\n$user-&gt;getAvatar();<\/code><\/pre>\n<p>Und wenn wir Benutzerdaten aus einem Token (OAuth 2) oder einem Token und einem Geheimnis (OAuth 1) abrufen wollen, bietet sanctum zwei Methoden daf\u00fcr: <code>userFromToken<\/code> und <code>userFromTokenAndSecret<\/code>:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-a19e394b-0450-461a-b3c3-0c7e3aa8ca67\" class=\"textannotation\">Laravel<\/span>\\Socialite\\Facades\\Socialite;\n\n$user = Socialite:;driver('google')-&gt;userFromToken($token);\n$user = Socialite::driver('twitter')-&gt;userFromTokenAndSecret($token, $secret);<\/code><\/pre>\n<h2>Laravel Sanctum<\/h2>\n<p>Laravel Sanctum ist ein einfaches Authentifizierungssystem f\u00fcr SPAs (Single Page Applications) und mobile Apps. Es erm\u00f6glicht es Nutzern, mehrere API-Tokens mit bestimmten Geltungsbereichen zu erzeugen. Diese Bereiche legen die erlaubten Aktionen f\u00fcr ein Token fest.<\/p>\n<h3>Verwendungsm\u00f6glichkeiten<\/h3>\n<p>Sanctum kann verwendet werden, um API-Tokens an den Nutzer auszugeben, ohne die Feinheiten von OAuth. Diese Token haben in der Regel eine lange G\u00fcltigkeitsdauer, z. B. Jahre, k\u00f6nnen aber jederzeit vom Nutzer widerrufen und neu erstellt werden.<\/p>\n<h3>Installation und Einrichtung<\/h3>\n<p>Wir k\u00f6nnen es \u00fcber Composer installieren:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/sanctum<\/code><\/pre>\n<p>Und wir m\u00fcssen die Konfigurations- und Migrationsdateien ver\u00f6ffentlichen:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish \u2013provider=\"<span id=\"urn:enhancement-b71ce991-99a2-4b11-860d-5398d5fc58a9\" class=\"textannotation\">Laravel<\/span>\\Sanctum\\SanctumServiceProvider\"<\/code><\/pre>\n<p>Jetzt, wo wir neue Migrationsdateien erstellt haben, m\u00fcssen wir sie migrieren:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate &lt;\/code&gt; or &lt;code&gt; php artisan migrate:fresh<\/code><\/pre>\n<h3>Wie man API-Tokens ausgibt<\/h3>\n<p>Bevor wir Token ausgeben, sollte unser Benutzermodell die Eigenschaft <strong><span id=\"urn:enhancement-2cd960e6-4b25-4314-b0d6-84bde38270a6\" class=\"textannotation\">Laravel<\/span>\\Sanctum\\HasApiTokens<\/strong>\u00a0verwenden:<\/p>\n<pre><code class=\"language-php\">use <span id=\"urn:enhancement-337e7e3d-8050-4e8d-ac6b-48d6f94a5060\" class=\"textannotation\">Laravel<\/span>\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticable\n{\n    use HasApiTokens;\n}<\/code><\/pre>\n<p>Wenn wir den Benutzer haben, k\u00f6nnen wir ein Token ausgeben, indem wir die Methode <code>createToken<\/code> aufrufen, die eine <strong>Laravel\\Sanctum\\NewAccessToken<\/strong>-Instanz zur\u00fcckgibt.<\/p>\n<p>Wir k\u00f6nnen die Methode <code>plainTextToken<\/code> f\u00fcr die Instanz <strong>NewAccessToken<\/strong> aufrufen, um den <strong>SHA-256<\/strong>-Klartextwert des Tokens zu sehen.<\/p>\n<h2>Tipps und Best Practices f\u00fcr die Laravel-Authentifizierung<\/h2>\n<h3>Ung\u00fcltig machen von Sitzungen auf anderen Ger\u00e4ten<\/h3>\n<p>Wie wir bereits besprochen haben, ist es wichtig, dass die Sitzung ung\u00fcltig gemacht wird, wenn sich der Nutzer abmeldet, aber das sollte auch f\u00fcr alle anderen Ger\u00e4te m\u00f6glich sein.<\/p>\n<p>Diese Funktion wird normalerweise verwendet, wenn der Nutzer sein Passwort \u00e4ndert oder aktualisiert und wir seine Sitzung von einem anderen Ger\u00e4t aus ung\u00fcltig machen wollen.<\/p>\n<p>Mit der Auth-Fassade ist das eine einfache Aufgabe. Da die Route, die wir verwenden, <code>auth<\/code> und <code>auth.session middleware<\/code> enth\u00e4lt, k\u00f6nnen wir die statische Methode <code>logoutOtherDevices<\/code> der Fassade verwenden:<\/p>\n<pre><code class=\"language-php\">Route::get('\/logout', [LogoutController::class, 'invoke'])\n    -&gt;middleware(['auth', 'auth.session']);\n\n<\/code><\/pre>\n<pre><code class=\"language-php\">use Illuminate\\Support\\Facades\\Auth;\n\nAuth::logoutOtherDevices($password);<\/code><\/pre>\n<h3>Konfiguration mit Auth::routes()<\/h3>\n<p>Die routes-Methode der Auth-Fassade ist nur ein Hilfsmittel, um alle f\u00fcr die Benutzerauthentifizierung erforderlichen Routen zu erstellen.<\/p>\n<p>Zu den Routen geh\u00f6ren Login (Get, Post), Logout (Post), Register (Get, Post) und Password Reset\/Email (Get, Post).<\/p>\n<p>Wenn du die Methode der Fassade aufrufst, macht sie Folgendes:<\/p>\n<pre><code class=\"language-php\">public static fucntion routes(array $options = [])\n{\n    if (!static::$app-&gt;providerIsLoaded(UiServiceProvider::class)) {\n        throw new RuntimeException('In order to use the Auth:;routes() method, please install the laravel\/ui package.');\n    }\n   \n    static::$app-&gt;make('router')-&gt;auth($options);\n}<\/code><\/pre>\n<p>Uns interessiert, was passiert, wenn die statische Methode auf dem Router aufgerufen wird. Das kann aufgrund der Funktionsweise von Fassaden knifflig sein, aber die folgende Methode wird wie folgt aufgerufen:<\/p>\n<pre><code class=\"language-php\">\/**\nRegister the typical authentication routes for an application.\n\n@param array $options\n@return void\n*\/\npublic function auth(array $options = [])\n{\n    \/\/ Authentication Routes...\n    $this-&gt;get('login', 'AuthLoginController@showLoginForm')-&gt;name('login');\n    $this-&gt;post('login', 'AuthLoginController@login');\n    $this-&gt;post('logout', 'AuthLoginController@logout')-&gt;name('logout');\n\n    \/\/ Registration Routes...\n    if ($options['register'] ?? true) {\n        $this-&gt;get('register', 'AuthRegisterController@showRegistrationForm')-&gt;name('register');\n        $this-&gt;post('register', 'AuthRegisterController@register');\n    }\n   \n    \/\/ Password Reset Routes...\n    if ($options['reset'] ?? true) {\n        $this-&gt;resetPassword();\n    }\n\n    \/\/ Email Verification Routes...\n    if ($options['verify'] ?? false) {\n        $this-&gt;emailVerification();\n    }\n}   <\/code><\/pre>\n<p>Standardm\u00e4\u00dfig werden alle Routen au\u00dfer der E-Mail-Best\u00e4tigungsroute erzeugt. Wir haben immer die Login- und Logout-Routen, aber die anderen k\u00f6nnen wir \u00fcber das Options-Array steuern.<\/p>\n<p>Wenn wir nur Login\/Logout und Registrierung haben wollen, k\u00f6nnen wir das folgende Options-Array \u00fcbergeben:<\/p>\n<pre><code class=\"language-php\">$options = [\"register\" =&gt; true, \"reset\" =&gt; false, \"verify\" =&gt; false];<\/code><\/pre>\n<h3>Schutz von Routen und benutzerdefinierten W\u00e4chtern<\/h3>\n<p>Wir wollen sicherstellen, dass einige Routen nur von authentifizierten Nutzern aufgerufen werden k\u00f6nnen. Das geht schnell, indem wir entweder die Middleware-Methode auf der Route-Fassade aufrufen oder die Middleware-Methode mit ihr verketten:<\/p>\n<pre><code class=\"language-php\">Route::middleware('auth')-&gt;get('\/user', function (Request $request) {\n    return $request-&gt;user();\n});\n\nRoute::get('\/user', function (Request $request) {\n    return $request-&gt;user();\n})-&gt;middleware('auth');<\/code><\/pre>\n<p>Dieser Guard stellt sicher, dass eingehende Anfragen authentifiziert werden.<\/p>\n<h3>Passwort-Best\u00e4tigung<\/h3>\n<p>Um <a href=\"https:\/\/www.google.com\/url?q=https:\/\/kinsta.com\/blog\/website-security-check\/&#038;sa=D&#038;source=editors&#038;ust=1665232246677644&#038;usg=AOvVaw0bmAaBiRrNMk9bLYHwv1jZ\">die Sicherheit der Website<\/a> zu erh\u00f6hen, m\u00f6chtest du oft das Passwort eines Benutzers best\u00e4tigen, bevor du mit einer anderen Aufgabe fortf\u00e4hrst.<\/p>\n<p>Wir m\u00fcssen eine Route von der Ansicht &#8222;Passwort best\u00e4tigen&#8220; aus definieren, um die Anfrage zu bearbeiten. Sie pr\u00fcft die Anfrage und leitet den Nutzer an das gew\u00fcnschte Ziel weiter. Gleichzeitig stellen wir sicher, dass unser Passwort in der Sitzung best\u00e4tigt wird. Standardm\u00e4\u00dfig muss das Passwort alle drei Stunden neu best\u00e4tigt werden, aber das kann in der Konfigurationsdatei <strong>config\/auth.php<\/strong> ge\u00e4ndert werden:<\/p>\n<pre><code class=\"language-php\">use Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Redirect;\n\nRoute::post('\/confirm-password', function (Request $request) {\n    if (!Hash::check($request-&gt;password, $request-&gt;user()-&gt;password)) {\n        return back()-&gt;withErrors([\n            'password' =&gt; ['The provided password does not match our records.']\n        ]);\n    }\n\n    $request-&gt;session()-&gt;passwordConfirmed();\n\n    return redirect()-&gt;intended();\n})-&gt;middleware(['auth']);<\/code><\/pre>\n<h3>Authenticable Vertrag<\/h3>\n<p>Der Authenticable-Vertrag, der sich unter IlluminateContractsAuth befindet, legt fest, was die UserProvider-Fassade implementieren soll:<\/p>\n<pre><code class=\"language-php\">namespace Illuminate\\Contracts\\Auth;\n\ninterface Authenticable \n{\n    public function getAuthIdentifierName();\n    \n    public function getAuthIdentifier();\n    \n    public function getAuthPassord();\n  \n    public function getRememberToken();\n\n    public function setRememberToken($value);\n  \n    public function getrememberTokenName();\n}<\/code><\/pre>\n<p>Die Schnittstelle erm\u00f6glicht es dem Authentifizierungssystem, mit jeder &#8222;User&#8220;-Klasse zu arbeiten, die sie implementiert.<\/p>\n<p>Dies gilt unabh\u00e4ngig davon, welche ORM- oder Speicherschichten verwendet werden. Laravel verf\u00fcgt standardm\u00e4\u00dfig \u00fcber die Klasse AppModelsUser, die diese Schnittstelle implementiert, was auch in der Konfigurationsdatei zu sehen ist:<\/p>\n<pre><code class=\"language-php\">return [\n    'providers' =&gt; [\n        'users' =&gt; [\n            'driver' =&gt; 'eloquent',\n            'model' =&gt; AppModelsUser::class,\n        ],\n     ],\n];<\/code><\/pre>\n<h3>Authentifizierungsereignisse<\/h3>\n<p>Es gibt viele Ereignisse, die w\u00e4hrend des gesamten Authentifizierungsprozesses ausgel\u00f6st werden k\u00f6nnen.<\/p>\n<p>Je nach deinen Zielen kannst du diesen Ereignissen in deiner <code>EventServiceProvider<\/code> einen Listener zuordnen.<\/p>\n<figure style=\"width: 1003px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Laravel-Listeners.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Laravel-Listeners.png\" alt=\"Laravel Listeners\" width=\"1003\" height=\"1999\"><\/a><figcaption class=\"wp-caption-text\">Eine Liste der Laravel-Listener, die f\u00fcr unseren Authentifizierungsdienst erstellt wurden<\/figcaption><\/figure>\n<h3>Neue Benutzer schnell erstellen<\/h3>\n<p>Das schnelle Anlegen eines neuen Benutzers kann \u00fcber den <strong>App\\User<\/strong>\u00a0erfolgen:<\/p>\n<pre><code class=\"language-php\">$user = new App\\User();\n$user-&gt;password = Hash::make('strong_password');\n$user-&gt;email = 'test-email@user.com';\n$user-&gt;name = 'Username';\n$user-&gt;save();<\/code><\/pre>\n<p>Oder \u00fcber die statische Methode create in der User-Fassade:<\/p>\n<pre><code class=\"language-php\">User::create([\n 'password' =&gt; Hash::make('strong-password'),\n 'email' =&gt; 'test-email@user.com',\n 'name' =&gt; 'username'\n]);<\/code><\/pre>\n<h2>Zusammenfassung<\/h2>\n<p>Das Laravel-\u00d6kosystem bietet viele Starter-Kits, mit denen du deine App mit einem Authentifizierungssystem zum Laufen bringen kannst, wie Breeze und Jetstream. Sie sind in hohem Ma\u00dfe anpassbar, da der Code auf unserer Seite generiert wird und wir ihn nach Belieben ver\u00e4ndern und bei Bedarf als Blaupause verwenden k\u00f6nnen.<\/p>\n<p>Es gibt viele Sicherheitsbedenken in Bezug auf die Authentifizierung und ihre Feinheiten, aber all diese Probleme k\u00f6nnen mit den Tools, die Laravel bietet, leicht gel\u00f6st werden. Diese Tools sind in hohem Ma\u00dfe anpassbar und einfach zu bedienen.<\/p>\n<p>Mit unserem schnellen Laravel-Hosting-Service kannst du deine Laravel-Anwendungen schnell und effizient bereitstellen. Teste deine App in Aktion mit einer <a href=\"https:\/\/kinsta.com\/de\/anmelden\/?product_type=app-db\">kostenlosen Testversion<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Authentifizierung ist eine der kritischsten und wichtigsten Funktionen von Webanwendungen. Web-Frameworks wie Laravel bieten viele M\u00f6glichkeiten f\u00fcr die Authentifizierung von Nutzern. Du kannst die Authentifizierungsfunktionen &#8230;<\/p>\n","protected":false},"author":267,"featured_media":60608,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[958],"class_list":["post-60607","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ein umfassender Leitfaden zur Laravel-Authentifizierung<\/title>\n<meta name=\"description\" content=\"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ein umfassender Leitfaden zur Laravel-Authentifizierung\" \/>\n<meta property=\"og:description\" content=\"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-30T13:40:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-01T15:51:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Coman Cosmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Coman Cosmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\"},\"author\":{\"name\":\"Coman Cosmin\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\"},\"headline\":\"Ein umfassender Leitfaden zur Laravel-Authentifizierung\",\"datePublished\":\"2023-03-30T13:40:09+00:00\",\"dateModified\":\"2025-09-01T15:51:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\"},\"wordCount\":3076,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\",\"name\":\"Ein umfassender Leitfaden zur Laravel-Authentifizierung\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\",\"datePublished\":\"2023-03-30T13:40:09+00:00\",\"dateModified\":\"2025-09-01T15:51:43+00:00\",\"description\":\"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ein umfassender Leitfaden zur Laravel-Authentifizierung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\",\"name\":\"Coman Cosmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"caption\":\"Coman Cosmin\"},\"description\":\"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/comancosmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ein umfassender Leitfaden zur Laravel-Authentifizierung","description":"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/","og_locale":"de_DE","og_type":"article","og_title":"Ein umfassender Leitfaden zur Laravel-Authentifizierung","og_description":"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.","og_url":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-03-30T13:40:09+00:00","article_modified_time":"2025-09-01T15:51:43+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","type":"image\/jpeg"}],"author":"Coman Cosmin","twitter_card":"summary_large_image","twitter_description":"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Coman Cosmin","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/"},"author":{"name":"Coman Cosmin","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da"},"headline":"Ein umfassender Leitfaden zur Laravel-Authentifizierung","datePublished":"2023-03-30T13:40:09+00:00","dateModified":"2025-09-01T15:51:43+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/"},"wordCount":3076,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/","url":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/","name":"Ein umfassender Leitfaden zur Laravel-Authentifizierung","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","datePublished":"2023-03-30T13:40:09+00:00","dateModified":"2025-09-01T15:51:43+00:00","description":"Erh\u00f6he die Sicherheit deiner Web-App mit der Laravel-Authentifizierung. Mach dich mit den besten Sicherheitspraktiken vertraut und lerne, wie du sicheren Zugriff gew\u00e4hrst.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/laravel-queue.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-authentifizierung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/de\/thema\/laravel\/"},{"@type":"ListItem","position":3,"name":"Ein umfassender Leitfaden zur Laravel-Authentifizierung"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da","name":"Coman Cosmin","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","caption":"Coman Cosmin"},"description":"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.","url":"https:\/\/kinsta.com\/de\/blog\/author\/comancosmin\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/267"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=60607"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60607\/revisions"}],"predecessor-version":[{"id":73960,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60607\/revisions\/73960"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60607\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/60608"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=60607"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=60607"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=60607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}