{"id":75657,"date":"2024-01-02T19:25:53","date_gmt":"2024-01-02T18:25:53","guid":{"rendered":"https:\/\/kinqsta.com\/it\/?p=75657&#038;preview=true&#038;preview_id=75657"},"modified":"2024-01-04T13:22:07","modified_gmt":"2024-01-04T12:22:07","slug":"autenticazione-next-js","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/","title":{"rendered":"Considerazioni sull&#8217;impostazione dell&#8217;autenticazione in Next.js"},"content":{"rendered":"<p>Negli ultimi anni, l&#8217;aggiunta dell&#8217;autenticazione a un&#8217;applicazione \u00e8 passata da qualcosa di oscuro e complicato a qualcosa per cui basta letteralmente usare un&#8217;API.<\/p>\n<p>Non mancano repository di esempio e tutorial su come implementare specifici schemi di autenticazione in Next.js, ma ce ne sono meno sui perch\u00e9 di quali schemi, strumenti e compromessi scegliere.<\/p>\n<p>Questo post illustrer\u00e0 cosa considerare nell&#8217;approccio all&#8217;autenticazione in Next.js, dalla scelta di un provider alla creazione di route per l&#8217;accesso e alla scelta tra lato server e lato client.<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>Scegliere un metodo\/fornitore di autenticazione<\/h2>\n<p>Esistono praticamente 1.000 modi per integrare l&#8217;autenticazione in un&#8217;applicazione. Piuttosto che concentrarci su particolari provider (argomento per un altro post del blog), esaminiamo i <strong>tipi di soluzioni di autenticazione<\/strong> e alcuni esempi di ciascuna. In termini di implementazione, <a href=\"https:\/\/next-auth.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">next-auth<\/a> sta rapidamente diventando un&#8217;opzione popolare per integrare l&#8217;applicazione Next.js con pi\u00f9 provider, aggiungere SSO, ecc.<\/p>\n<h3>Database tradizionale<\/h3>\n<p>Questa soluzione \u00e8 semplicissima: si memorizzano nomi utente e password in un database relazionale. Quando un utente si iscrive per la prima volta, si inserisce una nuova riga nella tabella `users` con le informazioni fornite. Quando l&#8217;utente accede, si verifica che le sue credenziali corrispondano a quelle memorizzate nella tabella. Quando un utente vuole cambiare la propria password, si aggiorna il valore nella tabella.<\/p>\n<p>L&#8217;autenticazione tradizionale su database \u00e8 sicuramente lo schema di autenticazione pi\u00f9 diffuso, se si considera la totalit\u00e0 delle applicazioni esistenti, ed esiste praticamente da sempre. \u00c8 molto flessibile, economico e non vincola a nessun fornitore in particolare. Ma \u00e8 necessario costruirlo da soli e, in particolare, preoccuparsi della crittografia e assicurarsi che quelle preziosissime password non finiscano nelle mani sbagliate.<\/p>\n<h3>Soluzioni di autenticazione dal fornitore di database<\/h3>\n<p>Negli ultimi anni (e, per quanto riguarda Firebase, gi\u00e0 da qualche anno), i fornitori di database gestiti sono diventati relativamente standard nell&#8217;offrire una sorta di soluzione di autenticazione gestita. <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> e <a href=\"https:\/\/aws.amazon.com\/cognito\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS<\/a> offrono sia un database gestito che un&#8217;autenticazione gestita come servizio attraverso una suite di API che astrae facilmente dalla creazione di utenti e dalla gestione delle sessioni (per saperne di pi\u00f9, proseguite nella lettura).<\/p>\n<p>L&#8217;accesso di un utente con l&#8217;autenticazione Supabase \u00e8 <a href=\"https:\/\/supabase.com\/docs\/guides\/auth\/auth-email\" target=\"_blank\" rel=\"noopener noreferrer\">semplice<\/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>Soluzioni di autenticazione che non provengono dal proprio fornitore di database<\/h3>\n<p>Forse ancora pi\u00f9 comune dell&#8217;autenticazione come servizio del DBaaS \u00e8 l&#8217;autenticazione come servizio di un&#8217;intera azienda o prodotto. <a href=\"https:\/\/auth0.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Auth0<\/a> esiste dal 2013 (ora \u00e8 di propriet\u00e0 di Okta) e le recenti aggiunte come <a href=\"https:\/\/stytch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Stytch<\/a> hanno dato priorit\u00e0 all&#8217;esperienza degli sviluppatori e hanno guadagnato un po&#8217; di spazio.<\/p>\n<figure style=\"width: 1244px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/Auth0-authentication.png\" alt=\"L'interfaccia utente che si ottiene utilizzando Auth0 per l'autenticazione\" width=\"1244\" height=\"814\"><figcaption class=\"wp-caption-text\">Auth0 per l&#8217;autenticazione<\/figcaption><\/figure>\n<h3>Single Sign On<\/h3>\n<p>L&#8217;SSO permette di &#8220;esternalizzare&#8221; l&#8217;identit\u00e0 a un fornitore esterno, che pu\u00f2 spaziare da un fornitore aziendale focalizzato sulla sicurezza come <a href=\"https:\/\/www.okta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Okta<\/a> a qualcosa di pi\u00f9 diffuso come <a href=\"https:\/\/developers.google.com\/identity\/gsi\/web\/guides\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Google<\/a> o GitHub. Google SSO \u00e8 onnipresente nel mondo SaaS, mentre alcuni strumenti dedicati agli sviluppatori effettuano l&#8217;autenticazione <em>solo<\/em> tramite GitHub.<\/p>\n<p>Qualunque fornitore si scelga, SSO \u00e8 generalmente un&#8217;aggiunta agli altri tipi di autenticazione di cui sopra e comporta <a href=\"https:\/\/workos.com\/blog\/the-developers-guide-to-sso\" target=\"_blank\" rel=\"noopener noreferrer\">le sue peculiarit\u00e0<\/a> per quanto riguarda l&#8217;integrazione con piattaforme esterne (attenzione: SAML utilizza XML).<\/p>\n<h3>Ok, allora quale scegliere?<\/h3>\n<p>Non esiste una scelta &#8220;corretta&#8221;: ci\u00f2 che \u00e8 giusto per il proprio progetto dipende dalle proprie priorit\u00e0. Se volete fare le cose in fretta senza un sacco di configurazioni iniziali, l&#8217;outsourcing dell&#8217;autenticazione ha senso (anche esternalizzarla completamente, UI inclusa, a qualcuno come Auth0). Se invece prevedete una configurazione pi\u00f9 complessa, \u00e8 opportuno costruire il proprio backend di autenticazione. E se pensate di supportare clienti pi\u00f9 grandi, prima o poi dovrete aggiungere il SSO.<\/p>\n<p>Next.js \u00e8 cos\u00ec popolare che la maggior parte di questi fornitori di autenticazione hanno documenti e guide all&#8217;integrazione specifiche per Next.js.<\/p>\n<h2><strong>Creazione di route per l&#8217;iscrizione e l&#8217;accesso e suggerimenti per raggiungere un livello di autenticazione extra<\/strong><\/h2>\n<p>Alcuni fornitori di autenticazione, come Auth0, forniscono intere pagine web ospitate per la registrazione e l&#8217;accesso. Ma se state costruendo queste pagine da zero, trovo che sia utile crearle all&#8217;inizio del processo, perch\u00e9 vi serviranno come reindirizzamento quando implementerete l&#8217;autenticazione.<\/p>\n<p>Quindi ha senso creare la struttura di queste pagine e poi aggiungere le richieste al backend in un secondo momento. Il modo pi\u00f9 semplice per implementare l&#8217;autenticazione \u00e8 avere due di queste route:<\/p>\n<ul>\n<li>Una per l&#8217;<strong>iscrizione<\/strong><\/li>\n<li>Un&#8217;altra per l&#8217;<strong>accesso<\/strong> quando l&#8217;utente ha gi\u00e0 un account<\/li>\n<\/ul>\n<p>Oltre alle basi, dovrete occuparvi di casi limite, come quando un utente dimentica la password. Alcuni team preferiscono inserire il processo di reimpostazione della password in un percorso separato, mentre altri aggiungono elementi dinamici dell&#8217;interfaccia utente alla normale pagina di accesso.<\/p>\n<p>Una bella pagina di iscrizione potrebbe non fare la differenza tra successo e fallimento, ma piccoli accorgimenti possono lasciare una buona impressione e fornire una migliore UX. Eccone alcuni raccolti da siti di tutto il web che hanno messo un po&#8217; di cura in pi\u00f9 nei loro processi di autenticazione.<\/p>\n<h3>1. Barra di navigazione aggiornata quando c&#8217;\u00e8 una sessione attiva<\/h3>\n<p>La call to action nella navbar di Stripe cambia in base alla presenza o meno di una sessione autenticata. Ecco come appare il sito di marketing se non si \u00e8 autenticati. Notate la call to action per accedere:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage.png\" alt=\"Homepage di Stripe\" width=\"1999\" height=\"1191\"><figcaption class=\"wp-caption-text\">La homepage di Stripe cambia la CTA se l&#8217;autenticazione \u00e8 avvenuta o meno<\/figcaption><\/figure>\n<p>Ecco come appare se siete autenticati. Notate che la call to action cambia per portare l&#8217;utente alla sua dashboard invece che all&#8217;accesso:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage-changes.png\" alt=\"Differenze nella homepage di Stripe\" width=\"1999\" height=\"1176\"><figcaption class=\"wp-caption-text\">Differenze nella homepage di Stripe<\/figcaption><\/figure>\n<p>Non cambia poi molto la mia esperienza con Stripe, ma \u00e8 utile.<\/p>\n<p>Un interessante inciso tecnico: c&#8217;\u00e8 una buona ragione per cui la maggior parte delle aziende non fa &#8220;dipendere&#8221; la navbar del proprio sito di marketing dall&#8217;autenticazione: significherebbe una richiesta API aggiuntiva per verificare lo stato di autenticazione su ogni singolo caricamento di pagina, la maggior parte dei quali riguarda visitatori che probabilmente non sono autenticati.<\/p>\n<h3>2. Contenuti utili aggiunti al modulo di iscrizione<\/h3>\n<p>Negli ultimi anni, soprattutto nel settore SaaS, le aziende hanno iniziato ad aggiungere contenuti alla pagina di iscrizione per &#8220;incoraggiare&#8221; l&#8217;utente a completare l&#8217;iscrizione. Questo pu\u00f2 aiutare a migliorare la conversione della pagina, almeno in modo incrementale.<\/p>\n<p>Ecco una pagina di iscrizione di Retool, con un&#8217;animazione e alcuni loghi laterali:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/retool-signup-page.png\" alt=\"Pagina di iscrizione di Retool\" width=\"1999\" height=\"1083\"><figcaption class=\"wp-caption-text\">Se avete intenzione di farlo, cercate di fare in modo che i font di ogni lato coincidano.<\/figcaption><\/figure>\n<p>Anche noi di Kinsta facciamo cos\u00ec per la nostra pagina di iscrizione:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/mykinsta-sign-in.png\" alt=\"Pagina di iscrizione di MyKinsta\" width=\"1999\" height=\"1174\"><figcaption class=\"wp-caption-text\">Pagina di iscrizione di Kinsta<\/figcaption><\/figure>\n<p>Un piccolo contenuto extra pu\u00f2 aiutare a ricordare all&#8217;utente per cosa si sta iscrivendo e perch\u00e9 ne ha bisogno.<\/p>\n<h3>3. Se si usa una password: suggerirne o imporne una forte<\/h3>\n<p>Mi sento di affermare che gli sviluppatori sanno bene che le password sono intrinsecamente insicure, ma <em>non<\/em> \u00e8 cos\u00ec per tutte le persone che si iscriveranno al prodotto. Incoraggiare gli utenti a creare password sicure \u00e8 un bene per voi e per loro.<\/p>\n<p>Coinbase \u00e8 molto severo per quanto riguarda l&#8217;iscrizione e richiede l&#8217;utilizzo di una password sicura e pi\u00f9 complicata del semplice nome di battesimo:<\/p>\n<figure style=\"width: 1428px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/coinbase-create-account.png\" alt=\"Creare un account con Coinbase\" width=\"1428\" height=\"1494\"><figcaption class=\"wp-caption-text\">Password debole su Coinbase<\/figcaption><\/figure>\n<p>Dopo averne generata una dal mio gestore di password, ero pronto a partire:<\/p>\n<figure style=\"width: 1464px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/coinbase-password-strength.png\" alt=\"Password forte su Coinbase\" width=\"1464\" height=\"1462\"><figcaption class=\"wp-caption-text\">Password forte su Coinbase<\/figcaption><\/figure>\n<p>L&#8217;interfaccia utente, per\u00f2, non mi diceva <em>perch\u00e9<\/em> la password non era abbastanza sicura, n\u00e9 i requisiti oltre alla presenza di un numero. Includere questi requisiti nel copy del prodotto render\u00e0 le cose pi\u00f9 semplici per l&#8217;utente e aiuter\u00e0 a evitare la frustrazione da ripetizione della password.<\/p>\n<h3>4. Etichettare gli input in modo da renderli compatibili con un gestore di password<\/h3>\n<p>Un americano su tre usa un gestore di password come <a href=\"https:\/\/1password.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">1Password<\/a>, eppure molti moduli sul web continuano a ignorare il `type=` negli input HTML. <a href=\"https:\/\/hidde.blog\/making-password-managers-play-ball-with-your-login-form\/\" target=\"_blank\" rel=\"noopener noreferrer\">Fate in modo che i moduli giochino con i gestori di password<\/a>:<\/p>\n<ul>\n<li>Racchiudete gli elementi di input in un elemento del modulo<\/li>\n<li>Assegnate agli input un tipo e un&#8217;etichetta<\/li>\n<li>Aggiungete funzionalit\u00e0 di completamento automatico agli input<\/li>\n<li>Non aggiungete campi dinamicamente (parlo proprio di te, <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>Pu\u00f2 fare la differenza tra un&#8217;iscrizione di 10 secondi, incredibilmente fluida, e una fastidiosa iscrizione manuale, soprattutto su mobile.<\/p>\n<h2><strong>Scegliere tra sessioni e JWT<\/strong><\/h2>\n<p>Una volta avvenuta l&#8217;autenticazione dell&#8217;utente, \u00e8 il momento di scegliere una strategia per mantenere lo stato durante le richieste successive. L&#8217;HTTP \u00e8 stateless e non vogliamo certo chiedere all&#8217;utente la sua password a ogni singola richiesta. Esistono <a href=\"https:\/\/stytch.com\/blog\/jwts-vs-sessions-which-is-right-for-you\/\" target=\"_blank\" rel=\"noopener noreferrer\">due metodi popolari per gestire questo aspetto<\/a>: le <strong>sessioni<\/strong> (o cookie) e i <strong>JWT<\/strong> (JSON web token), che si differenziano per il fatto che il lavoro venga svolto dal server o dal client.<\/p>\n<h3>Sessioni, ovvero cookie<\/h3>\n<p>Nell&#8217;autenticazione basata sulle sessioni, la logica e il lavoro per mantenere l&#8217;autenticazione sono gestiti dal <strong>server<\/strong>. Ecco il flusso di base:<\/p>\n<ol start=\"1\">\n<li>L&#8217;utente si autentica tramite la pagina di accesso.<\/li>\n<li><strong>Il server crea un record<\/strong> che rappresenta questa particolare &#8220;sessione&#8221; di navigazione. Questo viene solitamente inserito in un database con un identificatore casuale e dettagli sulla sessione, come la data di inizio e la data di scadenza.<\/li>\n<li>Questo identificatore casuale &#8211; qualcosa come `6982e583b1874abf9078e1d1dd5442f1` &#8211; viene inviato al browser e <strong>memorizzato come cookie<\/strong>.<\/li>\n<li>Nelle richieste successive del client, l&#8217;identificatore viene incluso e <strong>controllato nella tabella delle sessioni<\/strong> del database.<\/li>\n<\/ol>\n<p>Per quanto riguarda la durata delle sessioni, il momento in cui devono essere revocate, ecc., \u00e8 tutto piuttosto semplice e modificabile. L&#8217;aspetto negativo \u00e8 la latenza su scala significativa, viste tutte le scritture e le letture del database, ma questo potrebbe non essere un aspetto importante per la maggior parte dei lettori.<\/p>\n<h3>Gettoni web JSON (JWT)<\/h3>\n<p>Invece di gestire l&#8217;autenticazione per le richieste successive sul server, i <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519\" target=\"_blank\" rel=\"noopener noreferrer\">JWT<\/a> permettono di gestirle (per lo pi\u00f9) sul <strong>lato client<\/strong>. Ecco come funziona:<\/p>\n<ol start=\"1\">\n<li>L&#8217;utente si autentica tramite la pagina di accesso.<\/li>\n<li><strong>Il server genera un JWT<\/strong> che contiene l&#8217;identit\u00e0 dell&#8217;utente, i permessi che gli sono stati concessi e una data di scadenza (oltre a potenziali altre cose).<\/li>\n<li><strong>Il server firma il token<\/strong>, ne cripta il contenuto e lo invia al cliente.<\/li>\n<li>Per ogni richiesta, il client pu\u00f2 <strong>decifrare il token<\/strong> e verificare che l&#8217;utente abbia il permesso di effettuare la richiesta (senza dover comunicare con il server).<\/li>\n<\/ol>\n<p>Con tutto il lavoro successivo all&#8217;autenticazione iniziale scaricato sul client, l&#8217;applicazione pu\u00f2 essere caricata e funzionare molto pi\u00f9 velocemente. Ma c&#8217;\u00e8 un problema principale: non c&#8217;\u00e8 modo di invalidare un JWT dal server. Se l&#8217;utente vuole disconnettersi da un dispositivo o se l&#8217;ambito della sua autorizzazione cambia, dovrete aspettare che il JWT scada.<\/p>\n<h2><strong>Scegliere tra autorizzazione lato server e lato client<\/strong><\/h2>\n<p>Parte di ci\u00f2 che rende grande Next.js \u00e8 il rendering statico integrato: se la pagina \u00e8 statica, cio\u00e8 non deve effettuare chiamate API esterne, Next.js la memorizza automaticamente nella cache e pu\u00f2 servirla in modo estremamente veloce tramite un CDN. Le versioni precedenti a Next.js 13 sanno se una pagina \u00e8 statica se non include alcun `getServerSideProps` o `getInitialProps` nel file, mentre le versioni successive a Next.js 13 utilizzano <a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/rendering\/server-components\" target=\"_blank\" rel=\"noopener noreferrer\">React Server Components<\/a> per farlo.<\/p>\n<p>Per quanto riguarda l&#8217;autenticazione, <a href=\"https:\/\/nextjs.org\/docs\/pages\/building-your-application\/routing\/authenticating\" target=\"_blank\" rel=\"noopener noreferrer\">avete la possibilit\u00e0 di scegliere<\/a> tra il rendering di una pagina statica di &#8220;caricamento&#8221; e l&#8217;esecuzione del fetching sul lato client o l&#8217;esecuzione di tutto sul lato server. Per le pagine che richiedono l&#8217;autenticazione<a href=\"#ftnt1\">[1]<\/a>, potete eseguire il rendering di uno &#8220;scheletro&#8221; statico e poi effettuare le richieste di autenticazione sul lato client. In teoria, questo significa che la pagina si carica pi\u00f9 velocemente, anche se il contenuto iniziale non \u00e8 completamente pronto.<\/p>\n<p>Ecco un esempio semplificato tratto dai documenti che rende uno stato di caricamento finch\u00e9 l&#8217;oggetto utente non \u00e8 pronto:<\/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>Si noti che \u00e8 necessario creare una sorta di UI di caricamento per occupare lo spazio mentre il client effettua le richieste dopo il caricamento.<\/p>\n<p>Se volete semplificare le cose ed eseguire l&#8217;autenticazione lato server, potete aggiungere la richiesta di autenticazione alla funzione `getServerSideProps` e Next aspetter\u00e0 il rendering della pagina fino al completamento della richiesta. Al posto della logica condizionale dello snippet qui sopra, potreste eseguire qualcosa di pi\u00f9 semplice come questa versione semplificata dei documenti di Next:<\/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>Qui c&#8217;\u00e8 ancora la logica per gestire il fallimento dell&#8217;autenticazione, ma si reindirizza al login invece di eseguire il rendering dello stato di caricamento.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Qual \u00e8 la soluzione giusta per il vostro progetto? Iniziate valutando quanto siete sicuri della velocit\u00e0 dello schema di autenticazione. Se le richieste non richiedono tempo, potete eseguirle lato server ed evitare lo stato di caricamento. Se volete dare priorit\u00e0 al rendering immediato e poi attendere la richiesta, saltate `getServerSideProps` ed eseguite l&#8217;autenticazione altrove.<\/p>\n<p><a href=\"#ftnt_ref1\">[1]<\/a> Quando si usa Next, questo \u00e8 un buon motivo per non richiedere l&#8217;autenticazione a tappeto per ogni singola pagina. \u00c8 pi\u00f9 semplice farlo, ma significa perdere i vantaggi in termini di prestazioni del framework web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Negli ultimi anni, l&#8217;aggiunta dell&#8217;autenticazione a un&#8217;applicazione \u00e8 passata da qualcosa di oscuro e complicato a qualcosa per cui basta letteralmente usare un&#8217;API. Non mancano repository &#8230;<\/p>\n","protected":false},"author":310,"featured_media":75658,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25918,26212],"class_list":["post-75657","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-framework-javascript","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>Considerazioni sull&#039;impostazione dell&#039;autenticazione in Next.js - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Dalla scelta di un provider alla costruzione di route per l&#039;accesso, ecco cosa considerare quando si imposta l&#039;autenticazione in Next.js\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Considerazioni sull&#039;impostazione dell&#039;autenticazione in Next.js\" \/>\n<meta property=\"og:description\" content=\"Dalla scelta di un provider alla costruzione di route per l&#039;accesso, ecco cosa considerare quando si imposta l&#039;autenticazione in Next.js\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-02T18:25:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-04T12:22:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Dalla scelta di un provider alla costruzione di route per l&#039;accesso, ecco cosa considerare quando si imposta l&#039;autenticazione in Next.js\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Justin Gage\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\"},\"author\":{\"name\":\"Justin Gage\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f\"},\"headline\":\"Considerazioni sull&#8217;impostazione dell&#8217;autenticazione in Next.js\",\"datePublished\":\"2024-01-02T18:25:53+00:00\",\"dateModified\":\"2024-01-04T12:22:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\"},\"wordCount\":2158,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\",\"url\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\",\"name\":\"Considerazioni sull'impostazione dell'autenticazione in Next.js - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"datePublished\":\"2024-01-02T18:25:53+00:00\",\"dateModified\":\"2024-01-04T12:22:07+00:00\",\"description\":\"Dalla scelta di un provider alla costruzione di route per l'accesso, ecco cosa considerare quando si imposta l'autenticazione in Next.js\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Framework JavaScript\",\"item\":\"https:\/\/kinqsta.com\/it\/argomenti\/framework-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Considerazioni sull&#8217;impostazione dell&#8217;autenticazione in Next.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/it\/#website\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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:\/\/kinqsta.com\/it\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f\",\"name\":\"Justin Gage\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/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:\/\/kinqsta.com\/it\/blog\/author\/justingage\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Considerazioni sull'impostazione dell'autenticazione in Next.js - Kinsta\u00ae","description":"Dalla scelta di un provider alla costruzione di route per l'accesso, ecco cosa considerare quando si imposta l'autenticazione in Next.js","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:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/","og_locale":"it_IT","og_type":"article","og_title":"Considerazioni sull'impostazione dell'autenticazione in Next.js","og_description":"Dalla scelta di un provider alla costruzione di route per l'accesso, ecco cosa considerare quando si imposta l'autenticazione in Next.js","og_url":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2024-01-02T18:25:53+00:00","article_modified_time":"2024-01-04T12:22:07+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","type":"image\/jpeg"}],"author":"Justin Gage","twitter_card":"summary_large_image","twitter_description":"Dalla scelta di un provider alla costruzione di route per l'accesso, ecco cosa considerare quando si imposta l'autenticazione in Next.js","twitter_image":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Justin Gage","Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/"},"author":{"name":"Justin Gage","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f"},"headline":"Considerazioni sull&#8217;impostazione dell&#8217;autenticazione in Next.js","datePublished":"2024-01-02T18:25:53+00:00","dateModified":"2024-01-04T12:22:07+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/"},"wordCount":2158,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/","url":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/","name":"Considerazioni sull'impostazione dell'autenticazione in Next.js - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","datePublished":"2024-01-02T18:25:53+00:00","dateModified":"2024-01-04T12:22:07+00:00","description":"Dalla scelta di un provider alla costruzione di route per l'accesso, ecco cosa considerare quando si imposta l'autenticazione in Next.js","breadcrumb":{"@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#primaryimage","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/it\/blog\/autenticazione-next-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Framework JavaScript","item":"https:\/\/kinqsta.com\/it\/argomenti\/framework-javascript\/"},{"@type":"ListItem","position":3,"name":"Considerazioni sull&#8217;impostazione dell&#8217;autenticazione in Next.js"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/it\/#website","url":"https:\/\/kinqsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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:\/\/kinqsta.com\/it\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f","name":"Justin Gage","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/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:\/\/kinqsta.com\/it\/blog\/author\/justingage\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/75657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/users\/310"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/comments?post=75657"}],"version-history":[{"count":6,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/75657\/revisions"}],"predecessor-version":[{"id":75743,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/75657\/revisions\/75743"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/translations\/es"},{"href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75657\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media\/75658"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media?parent=75657"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/tags?post=75657"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/topic?post=75657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}