{"id":68010,"date":"2024-01-08T19:16:47","date_gmt":"2024-01-08T18:16:47","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=68010&#038;preview=true&#038;preview_id=68010"},"modified":"2024-01-09T09:14:58","modified_gmt":"2024-01-09T08:14:58","slug":"authentifizierung-next-js","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/","title":{"rendered":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js"},"content":{"rendered":"<p>In den letzten Jahren hat sich das Hinzuf\u00fcgen von Authentifizierung zu deiner Anwendung von etwas Obskurem und Kompliziertem zu etwas entwickelt, f\u00fcr das du buchst\u00e4blich einfach eine API verwenden kannst.<\/p>\n<p>Es gibt eine Vielzahl von Beispielen und Tutorials, die zeigen, wie man bestimmte Authentifizierungsverfahren in Next.js implementiert, aber wenige \u00fcber das Warum, welche Verfahren, Tools und Kompromisse man w\u00e4hlt.<\/p>\n<p>In diesem Beitrag erf\u00e4hrst du, was du bei der Authentifizierung in Next.js beachten solltest, von der Auswahl eines Anbieters \u00fcber die Erstellung von Routen f\u00fcr die Anmeldung bis hin zur Entscheidung zwischen Server- und Client-Seite.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Auswahl einer Authentifizierungsmethode \/ eines Anbieters<\/h2>\n<p>Es gibt praktisch 1.000 M\u00f6glichkeiten, die Authentifizierung in deine Anwendung einzubauen. Anstatt uns hier auf bestimmte Anbieter zu konzentrieren (ein Thema f\u00fcr einen anderen Blog-Beitrag), wollen wir uns die <strong>Arten von Authentifizierungsl\u00f6sungen<\/strong> und ein paar Beispiele daf\u00fcr ansehen. Was die Implementierung angeht, so wird <a href=\"https:\/\/next-auth.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">next-auth<\/a> schnell zu einer beliebten Option, um deine Next.js-Anwendung mit mehreren Anbietern zu integrieren, SSO hinzuzuf\u00fcgen usw.<\/p>\n<h3>Traditionelle Datenbank<\/h3>\n<p>Diese Variante ist so einfach wie nur m\u00f6glich: Du speicherst Benutzernamen und Passw\u00f6rter in einer relationalen Datenbank. Wenn sich ein Nutzer zum ersten Mal anmeldet, f\u00fcgst du eine neue Zeile in die Tabelle &#8222;Nutzer&#8220; mit den angegebenen Informationen ein. Wenn er sich anmeldet, vergleichst du die Anmeldedaten mit denen, die du in der Tabelle gespeichert hast. Wenn ein Benutzer sein Passwort \u00e4ndern m\u00f6chte, aktualisierst du den Wert in der Tabelle.<\/p>\n<p>Die traditionelle Datenbankauthentifizierung ist sicherlich das beliebteste Authentifizierungsverfahren, wenn man sich die Gesamtheit der bestehenden Anwendungen ansieht. Es ist sehr flexibel, billig und bindet dich nicht an einen bestimmten Anbieter. Aber du musst es selbst entwickeln und dich vor allem um die Verschl\u00fcsselung k\u00fcmmern und sicherstellen, dass die Passw\u00f6rter nicht in die falschen H\u00e4nde geraten.<\/p>\n<h3>Authentifizierungsl\u00f6sungen deines Datenbankanbieters<\/h3>\n<p>In den letzten Jahren (und, dank Firebase, schon seit einigen Jahren) ist es f\u00fcr Anbieter von verwalteten Datenbanken relativ normal geworden, eine Art verwaltete Authentifizierungsl\u00f6sung anzubieten. <a href=\"https:\/\/firebase.google.com\/docs\/auth\" target=\"_blank\" rel=\"noopener noreferrer\">Firebase<\/a>, <a href=\"https:\/\/supabase.com\/auth\" target=\"_blank\" rel=\"noopener noreferrer\">Supabase<\/a> und <a href=\"https:\/\/aws.amazon.com\/cognito\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS<\/a> bieten sowohl verwaltete Datenbanken als auch verwaltete Authentifizierung als Service \u00fcber eine Reihe von APIs an, die die Benutzererstellung und Sitzungsverwaltung einfach abstrahieren (mehr dazu sp\u00e4ter).<\/p>\n<p>Die Anmeldung eines Benutzers mit der Supabase-Authentifizierung ist <a href=\"https:\/\/supabase.com\/docs\/guides\/auth\/auth-email\" target=\"_blank\" rel=\"noopener noreferrer\">so einfach wie hier dargestellt<\/a>:<\/p>\n<pre><code class=\"language-javascript\">async function signInWithEmail() {\n  const { data, error } = await supabase.auth.signInWithPassword({\n    email: 'example@email.com',\n    password: 'example-password',\n  })\n}<\/code><\/pre>\n<h3>Authentifizierungsl\u00f6sungen, die nicht von deinem Datenbankanbieter stammen<\/h3>\n<p>Vielleicht noch verbreiteter als die Authentifizierung als Dienst deines DBaaS ist die Authentifizierung als Dienst eines ganzen Unternehmens oder Produkts. <a href=\"https:\/\/auth0.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Auth0<\/a> gibt es seit 2013 (jetzt im Besitz von Okta), und die j\u00fcngsten Erg\u00e4nzungen wie <a href=\"https:\/\/stytch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Stytch<\/a> haben die Erfahrung der Entwickler in den Vordergrund gestellt und sich dadurch einen Namen gemacht.<\/p>\n<figure style=\"width: 1244px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/Auth0-authentication.png\" alt=\"Die Benutzeroberfl\u00e4che, die du erh\u00e4ltst, wenn du Auth0 f\u00fcr die Authentifizierung verwendest\" width=\"1244\" height=\"814\"><figcaption class=\"wp-caption-text\">Auth0 f\u00fcr die Authentifizierung<\/figcaption><\/figure>\n<h3>Single Sign On<\/h3>\n<p>Mit SSO kannst du deine Identit\u00e4t an einen externen Anbieter &#8222;auslagern&#8220;. Das kann ein unternehmensorientierter, sicherheitsorientierter Anbieter wie <a href=\"https:\/\/www.okta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Okta<\/a> sein, aber auch ein weit verbreiteter Anbieter wie <a href=\"https:\/\/developers.google.com\/identity\/gsi\/web\/guides\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Google<\/a> oder GitHub. Google SSO ist in der SaaS-Welt allgegenw\u00e4rtig, und einige auf Entwickler ausgerichtete Tools authentifizieren sich <em>nur<\/em> \u00fcber GitHub.<\/p>\n<p>Welchen Anbieter du auch immer w\u00e4hlst, SSO ist in der Regel ein Zusatz zu den anderen oben genannten Authentifizierungsarten und hat seine <a href=\"https:\/\/workos.com\/blog\/the-developers-guide-to-sso\" target=\"_blank\" rel=\"noopener noreferrer\">eigenen Eigenheiten<\/a>, wenn es um die Integration mit externen Plattformen geht (sei gewarnt: SAML verwendet XML).<\/p>\n<h3>Okay, welche ist die richtige f\u00fcr mich?<\/h3>\n<p>Es gibt hier keine &#8222;richtige&#8220; Wahl &#8211; was f\u00fcr dein Projekt das Richtige ist, h\u00e4ngt von deinen Priorit\u00e4ten ab. Wenn du schnell und ohne gro\u00dfen Konfigurationsaufwand loslegen willst, macht es Sinn, die Authentifizierung auszulagern (oder sie sogar komplett, einschlie\u00dflich der Benutzeroberfl\u00e4che, an jemanden wie Auth0 zu \u00fcbertragen). Wenn du mit einer komplexeren Einrichtung rechnest, ist es sinnvoll, dein eigenes Autorisierungs-Backend zu bauen. Und wenn du vorhast, gr\u00f6\u00dfere Kunden zu unterst\u00fctzen, wirst du irgendwann SSO einf\u00fchren m\u00fcssen.<\/p>\n<p>Next.js ist inzwischen so popul\u00e4r, dass die meisten dieser Authentifizierungsanbieter \u00fcber Next.js-spezifische Dokumente und Integrationsanleitungen verf\u00fcgen.<\/p>\n<h2>Erstellen von Routen f\u00fcr die Anmeldung und den Sign-In und Tipps f\u00fcr die zus\u00e4tzliche Authentifizierungsmeile<\/h2>\n<p>Einige Authentifizierungsanbieter wie Auth0 bieten sogar ganze gehostete Webseiten f\u00fcr die Anmeldung und den Sign-In an. Wenn du diese jedoch von Grund auf neu erstellst, ist es sinnvoll, sie schon fr\u00fch im Prozess zu erstellen, da du sie als Weiterleitungen brauchst, wenn du deine Authentifizierung tats\u00e4chlich implementierst.<\/p>\n<p>Es ist also sinnvoll, die Struktur f\u00fcr diese Seiten zu erstellen und dann die Anfragen im Backend hinzuzuf\u00fcgen. Die einfachste Art, die Autorisierung zu implementieren, ist, zwei dieser Routen zu haben:<\/p>\n<ul>\n<li>Eine f\u00fcr die <strong>Ersta<\/strong><strong>nmeldung<\/strong><\/li>\n<li>Eine weitere f\u00fcr die <strong>Anmeldung<\/strong>, wenn der Nutzer bereits ein Konto hat<\/li>\n<\/ul>\n<p>Neben den Grundlagen musst du auch Sonderf\u00e4lle abdecken, z. B. wenn ein Nutzer sein Passwort vergisst. Manche Teams bevorzugen es, den Passwort-R\u00fccksetzungsprozess auf einer separaten Route durchzuf\u00fchren, w\u00e4hrend andere dynamische UI-Elemente zur regul\u00e4ren Anmeldeseite hinzuf\u00fcgen.<\/p>\n<p>Eine sch\u00f6ne Anmeldeseite entscheidet vielleicht nicht \u00fcber Erfolg oder Misserfolg, aber kleine Details k\u00f6nnen einen guten Eindruck hinterlassen und insgesamt f\u00fcr eine bessere UX sorgen. Hier sind ein paar Beispiele von Websites aus dem Internet, die ihre Authentifizierungsprozesse mit ein bisschen mehr Liebe gestaltet haben.<\/p>\n<h3>1. Aktualisiere deine Navigationsleiste, wenn es eine aktive Sitzung gibt<\/h3>\n<p>Der Aufruf zum Handeln in der Navigationsleiste von Stripe \u00e4ndert sich, je nachdem, ob du eine authentifizierte Sitzung hast oder nicht. So sieht die Marketingseite aus, wenn du nicht authentifiziert bist. Beachte die Handlungsaufforderung, dich anzumelden:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage.png\" alt=\"Stripe Startseite\" width=\"1999\" height=\"1191\"><figcaption class=\"wp-caption-text\">Auf der Startseite von Stripe \u00e4ndert sich die CTA, je nachdem, ob du angemeldet bist oder nicht<\/figcaption><\/figure>\n<p>Und so sieht es aus, wenn du authentifiziert bist. Beachte, dass sich die Handlungsaufforderung so \u00e4ndert, dass der Nutzer zu seinem Dashboard geleitet wird, anstatt sich anzumelden:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage-changes.png\" alt=\"\u00c4nderungen auf der Stripe-Startseite\" width=\"1999\" height=\"1176\"><figcaption class=\"wp-caption-text\">\u00c4nderungen auf der Stripe-Startseite<\/figcaption><\/figure>\n<p>Das \u00e4ndert mein Stripe-Erlebnis zwar nicht grundlegend, aber es ist durchdacht.Ein interessanter technischer Nebenaspekt: Es gibt einen guten Grund, warum die meisten Unternehmen die Navigationsleiste auf ihrer Marketingseite nicht von der Authentifizierung &#8222;abh\u00e4ngig&#8220; machen &#8211; es w\u00fcrde eine zus\u00e4tzliche API-Anfrage bedeuten, um bei jedem einzelnen Seitenaufruf zu pr\u00fcfen, ob die Besucher authentifiziert sind, und die meisten davon sind es wahrscheinlich nicht.<\/p>\n<h3>2. F\u00fcge hilfreiche Inhalte neben dem Anmeldeformular hinzu<\/h3>\n<p>In den letzten Jahren haben Unternehmen, vor allem im SaaS-Bereich, damit begonnen, der Anmeldeseite Inhalte hinzuzuf\u00fcgen, die den Nutzer dazu &#8222;ermutigen&#8220;, die Anmeldung tats\u00e4chlich abzuschlie\u00dfen. Das kann dazu beitragen, die Konversion auf der Seite zu verbessern, zumindest schrittweise.<\/p>\n<p>Hier ist eine Anmeldeseite von Retool, mit einer Animation und einigen Logos an der Seite:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/retool-signup-page.png\" alt=\"Retool Anmeldeseite\" width=\"1999\" height=\"1083\"><figcaption class=\"wp-caption-text\">Wenn du das machst, solltest du darauf achten, dass die Schriftarten auf beiden Seiten gleich sind<\/figcaption><\/figure>\n<p>Wir machen das auch bei Kinsta f\u00fcr unsere Anmeldeseite:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/mykinsta-sign-in.png\" alt=\"MyKinsta Anmeldeseite\" width=\"1999\" height=\"1174\"><figcaption class=\"wp-caption-text\">Kinsta-Anmeldeseite<\/figcaption><\/figure>\n<p>Der kleine zus\u00e4tzliche Inhalt kann helfen, den Nutzer daran zu erinnern, wof\u00fcr er sich anmeldet und warum er es braucht.<\/p>\n<h3>3. Wenn du ein Passwort verwendest: Schlage ein starkes Passwort vor oder erzwinge es<\/h3>\n<p>Unter Entwicklern ist es allgemein bekannt, dass Passw\u00f6rter von Natur aus unsicher sind, aber <em>nicht<\/em> bei allen Menschen, die sich f\u00fcr dein Produkt anmelden werden. Wenn du deine Nutzer\/innen dazu ermutigst, sichere Passw\u00f6rter zu erstellen, ist das gut f\u00fcr dich und gut f\u00fcr sie.<\/p>\n<p>Coinbase ist bei der Anmeldung ziemlich streng und verlangt von dir ein sicheres Passwort, das komplizierter ist als dein Vorname:<\/p>\n<figure style=\"width: 1428px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/coinbase-create-account.png\" alt=\"Coinbase Konto Erstellung\" width=\"1428\" height=\"1494\"><figcaption class=\"wp-caption-text\">Schwaches Passwort bei Coinbase<\/figcaption><\/figure>\n<p>Nachdem ich stattdessen eines mit meinem Passwortmanager erstellt hatte, konnte ich loslegen:<\/p>\n<figure style=\"width: 1464px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/coinbase-password-strength.png\" alt=\"Coinbase Passwort-St\u00e4rke\" width=\"1464\" height=\"1462\"><figcaption class=\"wp-caption-text\">Starkes Passwort bei Coinbase<\/figcaption><\/figure>\n<p><em>Die Benutzeroberfl\u00e4che sagte mir allerdings nicht, warum<\/em> das Passwort nicht sicher genug war, und auch nicht, dass es nicht nur eine Zahl sein musste. Wenn du das in deinen Produkttext aufnimmst, wird es f\u00fcr deine Nutzer einfacher und du vermeidest frustrierende Passwortwiederholungen.<\/p>\n<h3>4. Kennzeichne deine Eingaben so, dass sie mit einem Passwortmanager gut zusammenspielen<\/h3>\n<p>Jeder dritte Amerikaner nutzt einen Passwortmanager wie <a href=\"https:\/\/1password.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">1Password<\/a>, und trotzdem ignorieren viele Formulare im Internet weiterhin das &#8222;type=&#8220; in HTML-Eingaben. <a href=\"https:\/\/hidde.blog\/making-password-managers-play-ball-with-your-login-form\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sorge daf\u00fcr, dass deine Formulare mit Passwortmanagern zusammenarbeiten<\/a>:<\/p>\n<ul>\n<li>Schlie\u00dfe deine Eingabeelemente in ein Formularelement ein<\/li>\n<li>Gib den Eingaben einen Typ und eine Bezeichnung<\/li>\n<li>F\u00fcge deinen Eingaben Autovervollst\u00e4ndigungsfunktionen hinzu<\/li>\n<li>F\u00fcge keine Felder dynamisch hinzu (ich schaue dich an, <a href=\"https:\/\/www.reddit.com\/r\/delta\/comments\/f8s1sq\/why_does_the_delta_website_require_my_last_name\/\" target=\"_blank\" rel=\"noopener noreferrer\">Delta<\/a>)<\/li>\n<\/ul>\n<p>Das kann den Unterschied zwischen einer 10-sek\u00fcndigen, reibungslosen Anmeldung und einer nervigen manuellen Anmeldung ausmachen, vor allem auf dem Handy.<\/p>\n<h2>Die Wahl zwischen Sessions und JWT<\/h2>\n<p>Sobald sich dein\/e Nutzer\/in authentifiziert hat, musst du dich f\u00fcr eine Strategie entscheiden, wie du diesen Status bei nachfolgenden Anfragen beibehalten willst. HTTP ist zustandslos und wir wollen unseren Nutzer sicher nicht bei jeder einzelnen Anfrage nach seinem Passwort fragen. Es gibt <a href=\"https:\/\/stytch.com\/blog\/jwts-vs-sessions-which-is-right-for-you\/\" target=\"_blank\" rel=\"noopener noreferrer\">zwei g\u00e4ngige Methoden, um dies zu bewerkstelligen<\/a> &#8211; <strong>Sessions<\/strong> (oder Cookies) und <strong>JWTs<\/strong> (JSON Web Tokens) &#8211; und sie unterscheiden sich darin, ob der Server oder der Client die Arbeit \u00fcbernimmt.<\/p>\n<h3>Sitzungen, auch bekannt als Cookies<\/h3>\n<p>Bei der sitzungsbasierten Authentifizierung werden die Logik und die Arbeit zur Aufrechterhaltung der Authentifizierung vom <strong>Server<\/strong> \u00fcbernommen. Hier ist der grundlegende Ablauf:<\/p>\n<ol start=\"1\">\n<li>Der Nutzer authentifiziert sich auf der Anmeldeseite.<\/li>\n<li><strong>Der Server erstellt einen Datensatz<\/strong>, der diese spezielle &#8222;Sitzung&#8220; repr\u00e4sentiert Dieser wird in der Regel in eine Datenbank mit einer zuf\u00e4lligen Kennung und Details \u00fcber die Sitzung eingef\u00fcgt, z. B. wann sie begonnen hat und wann sie abl\u00e4uft.<\/li>\n<li>Diese zuf\u00e4llige Kennung &#8211; etwa &#8222;6982e583b1874abf9078e1d1dd5442f1&#8220; &#8211; wird an deinen Browser gesendet und <strong>als Cookie gespeichert<\/strong>.<\/li>\n<li>Bei nachfolgenden Anfragen des Clients wird die Kennung in die <strong>Sitzungstabelle<\/strong> <strong>in der Datenbank aufgenommen und \u00fcberpr\u00fcft<\/strong>.<\/li>\n<\/ol>\n<p>Es ist ziemlich einfach und kann angepasst werden, wenn es darum geht, wie lange Sitzungen dauern, wann sie widerrufen werden sollen usw. Der Nachteil ist die Latenz, die durch die vielen Schreib- und Lesevorg\u00e4nge in der Datenbank entsteht, aber das d\u00fcrfte f\u00fcr die meisten Leser keine gro\u00dfe Rolle spielen.<\/p>\n<h3>JSON Web Token (JWT)<\/h3>\n<p>Anstatt die Authentifizierung f\u00fcr nachfolgende Anfragen auf dem Server zu erledigen, kannst du sie mit <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519\" target=\"_blank\" rel=\"noopener noreferrer\">JWTs<\/a> (gr\u00f6\u00dftenteils) auf der <strong>Client-Seite<\/strong> erledigen. So funktioniert es:<\/p>\n<ol start=\"1\">\n<li>Der Nutzer authentifiziert sich \u00fcber die Anmeldeseite.<\/li>\n<li><strong>Der Server erstellt ein JWT<\/strong>, das die Identit\u00e4t des Nutzers, die ihm gew\u00e4hrten Rechte und ein Ablaufdatum enth\u00e4lt (neben m\u00f6glichen anderen Dingen).<\/li>\n<li><strong>Der Server signiert dieses Token<\/strong>, verschl\u00fcsselt den Inhalt kryptografisch und sendet das Ganze an den Kunden.<\/li>\n<li>Bei jeder Anfrage kann der Client <strong>das Token entschl\u00fcsseln<\/strong> und \u00fcberpr\u00fcfen, ob der Nutzer die Erlaubnis hat, die Anfrage zu stellen (ohne mit dem Server kommunizieren zu m\u00fcssen).<\/li>\n<\/ol>\n<p>Da die gesamte Arbeit nach der anf\u00e4nglichen Authentifizierung auf den Client verlagert wird, kann deine Anwendung viel schneller laden und arbeiten. Es gibt jedoch ein Hauptproblem: Es gibt keine M\u00f6glichkeit, ein JWT vom Server aus ung\u00fcltig zu machen. Wenn sich der Nutzer von einem Ger\u00e4t abmelden m\u00f6chte oder sich der Umfang seiner Berechtigung \u00e4ndert, musst du warten, bis das JWT abl\u00e4uft.<\/p>\n<h2>Die Wahl zwischen serverseitiger und clientseitiger Autorisierung<\/h2>\n<p>Was Next.js so gro\u00dfartig macht, ist das eingebaute statische Rendering &#8211; wenn deine Seite statisch ist, d.h. keine externen API-Aufrufe t\u00e4tigen muss, wird sie von Next.js automatisch zwischengespeichert und kann \u00fcber ein CDN extrem schnell ausgeliefert werden. Vor Next.js 13 erkennt Next.js, ob eine Seite statisch ist, wenn du keine `getServerSideProps` oder `getInitialProps` in die Datei einf\u00fcgst. Alle Versionen nach Next.js 13 verwenden stattdessen <a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/rendering\/server-components\" target=\"_blank\" rel=\"noopener noreferrer\">React Server Components<\/a>, um dies zu tun.<\/p>\n<p>Bei der Authentifizierung <a href=\"https:\/\/nextjs.org\/docs\/pages\/building-your-application\/routing\/authenticating\" target=\"_blank\" rel=\"noopener noreferrer\">hast du die Wahl<\/a>: Entweder du renderst eine statische &#8222;Lade&#8220;-Seite und erledigst die Abfrage clientseitig oder du machst alles serverseitig. F\u00fcr Seiten, die eine Authentifizierung erfordern <a href=\"#ftnt1\">[1]<\/a>, kannst du ein statisches &#8222;Skelett&#8220; rendern und dann Authentifizierungsanfragen auf der Client-Seite stellen. Theoretisch bedeutet das, dass die Seite schneller geladen wird, auch wenn der urspr\u00fcngliche Inhalt noch nicht vollst\u00e4ndig fertig ist.<\/p>\n<p>Hier ist ein vereinfachtes Beispiel aus den Dokumenten, das einen Ladezustand rendert, solange das Benutzerobjekt noch nicht fertig ist:<\/p>\n<pre><code class=\"language-javascript\">import useUser from '..\/lib\/useUser'\n \nconst Profile = () =&gt; {\n  \/\/ Fetch the user client-side\n  const { user } = useUser({ redirectTo: '\/login' })\n \n  \/\/ Server-render loading state\n  if (!user || user.isLoggedIn === false) {\n    \/\/ Build some sort of loading page here\n    return &lt;div&gt;Loading...&lt;\/div&gt;\n  }\n \n  \/\/ Once the user request finishes, show the user\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Your Account&lt;\/h1&gt;\n      &lt;p&gt;Username: {JSON.stringify(user.username,null)}&lt;\/p&gt;\n      &lt;p&gt;Email: {JSON.stringify(user.email,null)}&lt;\/p&gt;\n      &lt;p&gt;Address: {JSON.stringify(user.address,null)}&lt;\/p&gt;\n    &lt;\/div&gt;\n  )\n}\n \nexport default Profile<\/code><\/pre>\n<p>Beachte, dass du hier eine Art Lade-UI bauen musst, um Platz zu schaffen, w\u00e4hrend der Client nach dem Laden Anfragen stellt.<\/p>\n<p>Wenn du die Dinge vereinfachen und die Authentifizierung serverseitig ausf\u00fchren m\u00f6chtest, kannst du deine Authentifizierungsanfrage in die Funktion &#8222;getServerSideProps&#8220; einf\u00fcgen. Anstelle der bedingten Logik im obigen Snippet k\u00f6nntest du etwas Einfacheres wie diese vereinfachte Version aus den Next-Dokumenten verwenden:<\/p>\n<pre><code class=\"language-javascript\">import withSession from '..\/lib\/session'\n \nexport const getServerSideProps = withSession(async function ({ req, res }) {\n  const { user } = req.session\n \n  if (!user) {\n    return {\n      redirect: {\n        destination: '\/login',\n        permanent: false,\n      },\n    }\n  }\n \n  return {\n    props: { user },\n  }\n})\n \nconst Profile = ({ user }) =&gt; {\n  \/\/ Show the user. No loading state is required\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Your Account&lt;\/h1&gt;\n      &lt;p&gt;Username: {JSON.stringify(user.username,null)}&lt;\/p&gt;\n      &lt;p&gt;Email: {JSON.stringify(user.email,null)}&lt;\/p&gt;\n      &lt;p&gt;Address: {JSON.stringify(user.address,null)}&lt;\/p&gt;\n    &lt;\/div&gt;\n  )\n}\n \nexport default Profile<\/code><\/pre>\n<p>Hier gibt es immer noch eine Logik f\u00fcr den Fall, dass die Authentifizierung fehlschl\u00e4gt, aber es wird zur Anmeldung weitergeleitet, anstatt einen Ladezustand zu rendern.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Welche dieser M\u00f6glichkeiten ist also die richtige f\u00fcr dein Projekt? \u00dcberpr\u00fcfe zun\u00e4chst, wie sicher du dir bist, dass dein Authentifizierungsverfahren schnell funktioniert. Wenn deine Anfragen keine Zeit in Anspruch nehmen, kannst du sie serverseitig ausf\u00fchren und den Ladestatus vermeiden. Wenn du es vorziehst, <em>etwas<\/em> sofort zu rendern und dann auf die Anfrage zu warten, \u00fcberspringe `getServerSideProps` und f\u00fchre die Authentifizierung anderswo durch.<\/p>\n<p>[<a href=\"#ftnt_ref1\">1<\/a>] Wenn du Next verwendest, ist das ein guter Grund, die Authentifizierung nicht pauschal f\u00fcr jede einzelne Seite zu verlangen. Das ist zwar einfacher, f\u00fchrt aber dazu, dass du die Leistungsvorteile des Web-Frameworks von vornherein verpasst.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den letzten Jahren hat sich das Hinzuf\u00fcgen von Authentifizierung zu deiner Anwendung von etwas Obskurem und Kompliziertem zu etwas entwickelt, f\u00fcr das du buchst\u00e4blich einfach &#8230;<\/p>\n","protected":false},"author":310,"featured_media":68011,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[951,975],"class_list":["post-68010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-javascript-frameworks","topic-react"],"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>\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.\" \/>\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\/authentifizierung-next-js\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js\" \/>\n<meta property=\"og:description\" content=\"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\" \/>\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=\"2024-01-08T18:16:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-09T08:14:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.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=\"Justin Gage\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.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=\"Justin Gage\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\"},\"author\":{\"name\":\"Justin Gage\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f\"},\"headline\":\"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js\",\"datePublished\":\"2024-01-08T18:16:47+00:00\",\"dateModified\":\"2024-01-09T08:14:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\"},\"wordCount\":2230,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\",\"name\":\"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"datePublished\":\"2024-01-08T18:16:47+00:00\",\"dateModified\":\"2024-01-09T08:14:58+00:00\",\"description\":\"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript-Frameworks\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/javascript-frameworks\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js\"}]},{\"@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\/9c79ef0f55180723ff2b31baffe9070f\",\"name\":\"Justin Gage\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g\",\"caption\":\"Justin Gage\"},\"description\":\"Justin is a technical writer and author of the popular Technically newsletter. He did his B.S. in Data Science before a stint in full-stack engineering and now focuses on making complex technical concepts accessible to everyone.\",\"sameAs\":[\"https:\/\/technically.substack.com\/\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/justingage\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js - Kinsta\u00ae","description":"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.","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\/authentifizierung-next-js\/","og_locale":"de_DE","og_type":"article","og_title":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js","og_description":"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.","og_url":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2024-01-08T18:16:47+00:00","article_modified_time":"2024-01-09T08:14:58+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","type":"image\/jpeg"}],"author":"Justin Gage","twitter_card":"summary_large_image","twitter_description":"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Justin Gage","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/"},"author":{"name":"Justin Gage","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f"},"headline":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js","datePublished":"2024-01-08T18:16:47+00:00","dateModified":"2024-01-09T08:14:58+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/"},"wordCount":2230,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/","url":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/","name":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","datePublished":"2024-01-08T18:16:47+00:00","dateModified":"2024-01-09T08:14:58+00:00","description":"Von der Auswahl eines Anbieters bis zur Erstellung von Routen f\u00fcr die Anmeldung gibt es mehrere Dinge zu beachten, wenn man die Authentifizierung in Next.js? einrichtet.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/authentifizierung-next-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"JavaScript-Frameworks","item":"https:\/\/kinsta.com\/de\/thema\/javascript-frameworks\/"},{"@type":"ListItem","position":3,"name":"\u00dcberlegungen bei der Einrichtung der Authentifizierung in Next.js"}]},{"@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\/9c79ef0f55180723ff2b31baffe9070f","name":"Justin Gage","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g","caption":"Justin Gage"},"description":"Justin is a technical writer and author of the popular Technically newsletter. He did his B.S. in Data Science before a stint in full-stack engineering and now focuses on making complex technical concepts accessible to everyone.","sameAs":["https:\/\/technically.substack.com\/"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/justingage\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/68010","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\/310"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=68010"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/68010\/revisions"}],"predecessor-version":[{"id":68199,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/68010\/revisions\/68199"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/68010\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/68011"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=68010"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=68010"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=68010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}