{"id":67640,"date":"2023-03-30T14:41:52","date_gmt":"2023-03-30T13:41:52","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=67640&#038;preview=true&#038;preview_id=67640"},"modified":"2025-09-01T16:52:00","modified_gmt":"2025-09-01T15:52:00","slug":"autenticazione-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/","title":{"rendered":"Guida Completa all&#8217;Autenticazione in Laravel"},"content":{"rendered":"<p>L&#8217;autenticazione \u00e8 una delle caratteristiche essenziali delle applicazioni web. I framework web come Laravel offrono agli utenti diversi modi per autenticarsi.<\/p>\n<p>\u00c8 possibile implementare le funzioni di autenticazione di Laravel in modo rapido e sicuro. Tuttavia, implementare queste funzioni di autenticazione in modo scorretto pu\u00f2 essere rischioso perch\u00e9 persone malintenzionate potrebbero sfruttare eventuali falle.<\/p>\n<p>Questa guida spiega tutto ci\u00f2 che c&#8217;\u00e8 da sapere per iniziare a usare i metodi di autenticazione di Laravel che avete scelto.<\/p>\n<p>Continuate a leggere!<\/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>Introduzione all&#8217;Autenticazione in Laravel<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/it\/blog\/framework-laravel\/\">Laravel<\/a> introduce moduli composti da &#8220;guardie&#8221; (guards) e &#8220;<a href=\"https:\/\/laravel.com\/docs\/9.x\/providers\">fornitori<\/a>&#8221; (providers). Le guardie definiscono l&#8217;autenticazione dell&#8217;utente per ogni richiesta, mentre i fornitori definiscono il recupero dell&#8217;utente da un <a href=\"https:\/\/kinsta.com\/it\/blog\/archiviazione-persistente\/\">archivio persistente<\/a> (per esempio un database <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-mysql\/\">MySQL<\/a>).<\/p>\n<p>Definiamo i nostri parametri di autenticazione in un file chiamato <code>config\/auth.php<\/code>. Il file include diverse opzioni per regolare e modificare il comportamento di Laravel in materia di autenticazione.<\/p>\n<p>Per prima cosa, dovete definire le impostazioni predefinite di autenticazione. Questa opzione controlla le opzioni predefinite di autenticazione e di reset della password della vostra applicazione. Potete modificare queste impostazioni predefinite in base alle vostre esigenze, ma sono un inizio perfetto per la maggior parte delle applicazioni.<\/p>\n<p>Successivamente, definite le guardie di autenticazione per la vostra applicazione. In questo caso, la nostra configurazione predefinita usa l&#8217;archiviazione della sessione e lo user provider di Eloquent. Tutti i driver di autenticazione hanno uno 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><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">In seguito, assicuriamoci che tutti i driver di autenticazione abbiano uno user provider. Questo definisce il modo in cui gli utenti vengono recuperati dal database o da altri meccanismi di archiviazione per conservare i dati degli utenti. Potete configurare pi\u00f9 fonti che rappresentano ogni modello o tabella se avete pi\u00f9 tabelle o modelli di utenti. Queste fonti possono essere assegnate a qualsiasi altra guardia di autenticazione che avete definito.<\/span><\/p>\n<p>Gli utenti possono anche voler reimpostare la propria password. Potete specificare pi\u00f9 configurazioni di reimpostazione della password se avete pi\u00f9 tabelle o modelli di utenti nell&#8217;applicazione e volete impostazioni separate in base agli specifici tipi di utenti. Il tempo di scadenza \u00e8 il numero di minuti di validit\u00e0 di ogni token di reset. Questa funzione di sicurezza fa s\u00ec che i token abbiano vita breve, in modo da avere meno tempo per essere indovinati. Potete modificare questo valore in base alle vostre esigenze.<\/p>\n<p>Infine, dovete definire l&#8217;intervallo di tempo prima che la conferma della password si esaurisca e all&#8217;utente venga richiesto di reinserire la password nella schermata di conferma. Per impostazione predefinita, il timeout dura tre ore.<\/p>\n<h2>Tipi di Metodi di Autenticazione in Laravel<\/h2>\n<p>Non esiste un metodo di autenticazione perfetto per ogni scenario, ma conoscerlo vi aiuter\u00e0 a prendere decisioni migliori. Vi servir\u00e0 anche sapere come Laravel si sta evolvendo con le nuove funzionalit\u00e0 di <a href=\"https:\/\/kinsta.com\/it\/blog\/laravel-9\/\">Laravel 9<\/a>. Questo rende il nostro lavoro di sviluppo molto pi\u00f9 semplice quando cambiamo modalit\u00e0 di autenticazione.<\/p>\n<h3>Autenticazione Basata su Password<\/h3>\n<p>Si tratta di un metodo rudimentale per autenticare un utente, ancora utilizzato da migliaia di organizzazioni, ma considerando lo sviluppo attuale, sta diventando chiaramente obsoleto.<\/p>\n<p>I fornitori devono imporre l&#8217;implementazione di password complesse, garantendo al contempo un attrito minimo per l&#8217;utente finale.<\/p>\n<p>Il funzionamento \u00e8 piuttosto semplice: l&#8217;utente inserisce il nome e la password e se nel database c&#8217;\u00e8 una corrispondenza tra questi due dati, il server decide di autenticare la richiesta e di permettere all&#8217;utente di accedere alle risorse per un periodo di tempo predefinito.<\/p>\n<h3>Autenticazione Basata su Token<\/h3>\n<p>Questa metodologia prevede che all&#8217;utente venga rilasciato un token unico al momento della verifica.<\/p>\n<p>Avendo questo token, l&#8217;utente pu\u00f2 accedere alle risorse pertinenti. Il privilegio \u00e8 attivo fino alla scadenza del token.<\/p>\n<p>Mentre il token \u00e8 attivo, l&#8217;utente non deve usare alcun nome utente o password, ma quando recupera un nuovo token, questi due elementi vengono richiesti.<\/p>\n<p>I token sono oggi ampiamente utilizzati in diversi scenari, poich\u00e9 sono entit\u00e0 stateless che contengono tutti i dati di autenticazione.<\/p>\n<p>Fornire un modo per separare la generazione del token dalla sua verifica offre ai vendor una grande flessibilit\u00e0.<\/p>\n<h3>Autenticazione a Pi\u00f9 Fattori<\/h3>\n<p>Come suggerisce il nome, implica l&#8217;utilizzo di almeno due fattori di autenticazione, elevando la sicurezza offerta.<\/p>\n<p>A differenza dell&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/autenticazione-a-due-fattori-wordpress\/\">autenticazione a due fattori<\/a> che coinvolge solo due fattori, questo metodo pu\u00f2 coinvolgerne due, tre, quattro e anche di pi\u00f9.<\/p>\n<p>L&#8217;implementazione tipica di questo metodo prevede l&#8217;utilizzo di una password, dopodich\u00e9 l&#8217;utente riceve un codice di verifica sul proprio smartphone. I fornitori che implementano questo metodo devono fare attenzione ai falsi positivi e alle interruzioni di rete, che possono diventare un grosso problema se si scala rapidamente.<\/p>\n<h2>Come Implementare l&#8217;Autenticazione in Laravel<\/h2>\n<p>Questa sezione vi insegner\u00e0 diversi modi per autenticare gli utenti della vostra applicazione. Alcune librerie come Jetstream, Breeze e Socialite contengono <a href=\"https:\/\/kinsta.com\/it\/blog\/tutorial-laravel\/\">tutorial gratuiti<\/a> su come utilizzarle.<\/p>\n<h3>Autenticazione Manuale<\/h3>\n<p>Iniziamo con la registrazione degli utenti e la creazione delle route necessarie in <code>routes\/web.php<\/code>.<\/p>\n<p>Creeremo due percorsi, uno per visualizzare il modulo e uno per registrarsi:<\/p>\n<pre><code class=\"language-php\">use App\\Http\\Controllers\\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']);\nRoute::post('\/register', [RegisterController::class, 'store']);<\/code><\/pre>\n<p>E creeremo il controller necessario per questi percorsi:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller Auth\/RegisterController -r<\/code><\/pre>\n<p>Ora aggiornate il codice come segue:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse illuminate\\Htpp\\Request;\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><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Il controller ora \u00e8 vuoto e restituisce una vista da registrare. Creiamo questa vista in <\/span><code>resources\/views\/auth<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> e chiamiamola <\/span><code>register.blade.php<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.<\/span><\/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=\"Vista Laravel blade per la registrazione degli utenti.\" width=\"1968\" height=\"1862\"><\/a><figcaption class=\"wp-caption-text\">Vista Laravel blade per la registrazione degli utenti.<\/figcaption><\/figure>\n<p>Ora che tutto \u00e8 a posto, dovremmo visitare il nostro percorso <code>\/register<\/code> e vedere il seguente modulo:<\/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=\"Modulo di registrazione per l'autenticazione manuale.\" width=\"960\" height=\"264\"><figcaption id=\"caption-attachment-162747\" class=\"wp-caption-text\">Modulo di registrazione per l&#8217;autenticazione manuale.<\/figcaption><\/figure>\n<p>Ora che possiamo visualizzare un modulo che l&#8217;utente pu\u00f2 compilare e ottenere i dati, dobbiamo ottenere i dati dell&#8217;utente, convalidarli e memorizzarli nel database se tutto \u00e8 a posto. In questo caso dovreste usare una transazione del database per assicurarvi che i dati inseriti siano completi.<\/p>\n<p>Useremo la funzione di convalida delle richieste di Laravel per assicurarci che tutte e tre le credenziali siano richieste. Dobbiamo assicurarci che l&#8217;email abbia un formato email e sia unica nella tabella <code>users<\/code> e che la password sia confermata e abbia un minimo di 8 caratteri:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Hash;\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>Ora che i nostri input sono stati convalidati, qualsiasi cosa che non sia in linea con la nostra convalida dar\u00e0 luogo a un errore che verr\u00e0 visualizzato nel modulo:<\/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=\"Esempio di input non valido per la registrazione\" width=\"960\" height=\"168\"><figcaption id=\"caption-attachment-162751\" class=\"wp-caption-text\">Esempio di input non valido per la registrazione<\/figcaption><\/figure>\n<p>Supponendo di aver creato un account utente nel metodo <code>store<\/code>, vogliamo anche effettuare il login dell&#8217;utente. Ci sono due modi per farlo. Possiamo farlo manualmente o usare la <strong>facade Auth<\/strong>.<\/p>\n<p>Dopo che l&#8217;utente ha effettuato il login, non dobbiamo riportarlo alla schermata di registrazione ma a una nuova pagina, come una bacheca o una homepage. Questo \u00e8 ci\u00f2 che faremo qui:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider;\nuse Illuminate\\Foundation\\Auth\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\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>Ora che l&#8217;utente si \u00e8 registrato e ha effettuato il login <code>-n<\/code>, dobbiamo assicurarci che possa disconnettersi in modo sicuro.<\/p>\n<p>Laravel suggerisce di invalidare la sessione e di rigenerare il token di sicurezza dopo il logout. Ed \u00e8 proprio quello che faremo. Inizieremo creando una nuova route <code>\/logout<\/code> con il metodo <code>destroy<\/code> di <strong>LogoutController<\/strong>:<\/p>\n<pre><code class=\"language-php\">use App\\Http\\Controllers\\Auth\\RegisterController;\nuse App\\Http\\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']);\nRoute::post('\/register', [RegisterController::class, 'store']);\nRoute::post('\/logout', [Logoutcontroller::class, 'destroy'])\n    -&gt;middleware('auth');<\/code><\/pre>\n<p>Il passaggio del logout attraverso il middleware <code>auth<\/code> \u00e8 molto importante. Gli utenti non devono poter accedere al percorso se non hanno effettuato il login.<\/p>\n<p>Ora create un controller come abbiamo fatto in precedenza:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller Auth\/LogoutController -r<\/code><\/pre>\n<p>Possiamo assicurarci di ottenere la richiesta come parametro nel metodo <code>destroy<\/code>. Disconnettiamo l&#8217;utente attraverso la facade Auth, invalidiamo la sessione e rigeneriamo il token, quindi reindirizziamo l&#8217;utente alla homepage:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\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        $request-&gt;session()-&gt;regenerateToken();\n \n        return redirect('\/');\n     }\n}<\/code><\/pre>\n<h3>Memorizzare gli Utenti<\/h3>\n<p>La maggior parte, se non tutte, le moderne applicazioni web prevedono una casella di controllo &#8220;remember me&#8221; (ricordami) nel loro modulo di login.<\/p>\n<p>Se vogliamo fornire la funzionalit\u00e0 &#8220;remember me&#8221;, possiamo passare un valore booleano come secondo argomento del metodo attempt.<\/p>\n<p>Se il valore \u00e8 valido, Laravel manterr\u00e0 l&#8217;utente autenticato a tempo indeterminato o fino a quando non verr\u00e0 disconnesso manualmente. La tabella degli utenti deve includere la colonna <code>remember_token<\/code> (\u00e8 per questo che rigeneriamo i token), dove memorizzeremo il nostro token &#8220;remember me&#8221;.<\/p>\n<p>La migrazione predefinita degli utenti la include gi\u00e0.<\/p>\n<p>Prima di tutto, dovete aggiungere il campo <strong>Remember me<\/strong> al vostro modulo:<\/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=\"Aggiunta del campo Remember me.\" width=\"1396\" height=\"596\"><\/a><figcaption class=\"wp-caption-text\">Aggiunta del campo Remember me.<\/figcaption><\/figure>\n<p>Dopodich\u00e9, prendete le credenziali dalla richiesta e usatele nel metodo attempt della facade Auth.<\/p>\n<p>Se l&#8217;utente viene ricordato, effettueremo il login e lo reindirizzeremo alla nostra homepage. In caso contrario, lanceremo un errore:<\/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>Resettare le Password<\/h3>\n<p>La maggior parte delle applicazioni web offre agli utenti la possibilit\u00e0 di reimpostare la propria password.<\/p>\n<p>Creeremo un&#8217;altra route per la password dimenticata e creeremo il controller come abbiamo fatto finora. Inoltre, aggiungeremo una route per il link di reimpostazione della password che contiene il token per l&#8217;intero processo:<\/p>\n<pre><code class=\"language-php\">Route::post('\/forgot-password', [ForgotPasswordLinkController::class, 'store']);\nRoute::post('\/forgot-password\/{token}', [ForgotPasswordController::class, 'reset']);<\/code><\/pre>\n<p>All&#8217;interno del metodo store, prenderemo l&#8217;email dalla richiesta e la convalideremo come abbiamo fatto.<\/p>\n<p>Dopodich\u00e9, possiamo usare il metodo <code>sendResetLink<\/code> dall\u2019interfaccia della password.<\/p>\n<p>Infine, come risposta, vogliamo restituire lo stato che spiega se l&#8217;invio del link \u00e8 riuscito o se ci sono errori:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Password;\n\nclass ForgotPasswordLinkController extends Controller\n{\n    public function store(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>Ora che il link per la reimpostazione \u00e8 stato inviato all&#8217;email dell&#8217;utente, dobbiamo occuparci della logica di ci\u00f2 che accade dopo.<\/p>\n<p>Otterremo il token, l&#8217;email e la nuova password nella richiesta e li convalideremo.<\/p>\n<p>Dopodich\u00e9, possiamo usare il metodo di reset della facade della password per lasciare che Laravel si occupi di tutto il resto dietro le quinte.<\/p>\n<p>La password sar\u00e0 sempre sottoposta a hash per mantenerla sicura.<\/p>\n<p>Alla fine, verificheremo se la password \u00e8 stata resettata e, in caso affermativo, reindirizzeremo l&#8217;utente alla schermata di login con un messaggio di successo. In caso contrario, visualizzeremo un errore che indica che non \u00e8 stato possibile resettare la password:<\/p>\n<pre><code class=\"language-php\">namespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Password;\nuse Illuminate\\Support\\Str;\n\nclass ForgotPasswordController extends Controller\n{\n    public function reset(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><a href=\"https:\/\/kinsta.com\/it\/blog\/laravel-breeze\/\">Laravel Breeze<\/a> \u00e8 una semplice implementazione delle funzioni di autenticazione di Laravel: login, registrazione, reset della password, verifica via email e conferma della password. Potete usarlo per implementare l&#8217;autenticazione nella vostra nuova applicazione Laravel.<\/p>\n<h3>Installazione e Configurazione<\/h3>\n<p>Dopo aver creato la vostra Applicazione Laravel, tutto ci\u00f2 che dovete fare \u00e8 configurare il database, eseguire le migrazioni e installare il pacchetto laravel\/breeze tramite composer:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/breeze --dev<\/code><\/pre>\n<p>Dopodich\u00e9, eseguite i seguenti passaggi:<\/p>\n<pre><code class=\"language-bash\">php artisan breeze:install<\/code><\/pre>\n<p>Cos\u00ec pubblicherete le vostre viste di autenticazione, le route, i controller e le altre risorse che utilizza. Dopo questo passaggio, avrete il controllo completo di tutto ci\u00f2 che Breeze mette a disposizione.<\/p>\n<p>Ora dobbiamo rendere la nostra applicazione al frontend, quindi installeremo le nostre dipendenze JS (che utilizzeranno @vite):<\/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>In seguito, i link per il login e la registrazione dovrebbero essere presenti nella vostra homepage e tutto dovrebbe funzionare senza problemi.<\/p>\n<h2>Laravel Jetstream<\/h2>\n<p>Laravel Jetstream estende Laravel Breeze con utili funzioni e altri stack di frontend.<\/p>\n<p>Fornisce login, registrazione, verifica dell&#8217;email, <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\">autenticazione a due fattori<\/a>, gestione delle sessioni, supporto API tramite Sanctum e gestione opzionale del team.<\/p>\n<p>Quando installate Jetstream dovete scegliere tra Livewire e <a href=\"https:\/\/kinsta.com\/it\/blog\/laravel-inertia\/\">Inertia<\/a> per il frontend. Per quanto riguarda il backend, usa Laravel Fortify, un backend di autenticazione &#8220;headless&#8221;, agnostico rispetto al frontend per Laravel.<\/p>\n<h3>Installazione e Configurazione<\/h3>\n<p>Lo installeremo tramite Composer nel nostro progetto Laravel:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/jetstream<\/code><\/pre>\n<p>Dopodich\u00e9 eseguiamo il comando <code>php artisan jetstream:install [stack]<\/code>, che accetta gli argomenti <code>[stack]<\/code> <code>Livewire<\/code> o <code>Inertia<\/code>. Potete passare l&#8217;opzione <code>--teams<\/code>\u00a0per abilitare la funzione dei team.<\/p>\n<p>Questo installer\u00e0 anche 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> per i test.<\/p>\n<p>Infine, dobbiamo eseguire il rendering del frontend della nostra applicazione utilizzando il seguente comando:<\/p>\n<pre><code class=\"language-php\">npm install\nnpm run dev<\/code><\/pre>\n<h2>Laravel Fortify<\/h2>\n<p>Laravel Fortify \u00e8 un&#8217;implementazione di autenticazione backend che \u00e8 agnostica rispetto al frontend. Non \u00e8 necessario usare Laravel Fortify per implementare le funzioni di autenticazione di Laravel.<\/p>\n<p>Viene utilizzato anche in starter kit come Breeze e Jetstream. Potete anche usare Fortify standalone, che \u00e8 solo un&#8217;implementazione del backend. Se lo usate da solo, il vostro frontend deve chiamare le route di Fortify.<\/p>\n<h3>Installazione e Configurazione<\/h3>\n<p>Possiamo installare Fortify tramite Composer:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/fortify<\/code><\/pre>\n<p>Ora dobbiamo pubblicare le risorse di Fortify:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"Laravel\\Fortify\\FortifyServiceProvider\"<\/code><\/pre>\n<p>A questo punto, creeremo una nuova cartella <strong>app\/Actions<\/strong> oltre al nuovo <strong>FortifyServiceProvider<\/strong>, al file di configurazione e alle migrazioni del database.<\/p>\n<p>Infine, eseguite:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<p>Oppure:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh<\/code><\/pre>\n<p>E il vostro Fortify \u00e8 pronto per essere utilizzato.<\/p>\n<h2>Laravel Socialite<\/h2>\n<p>Laravel include una semplice funzione di autenticazione degli utenti basata su OAuth. Supporta i login social tramite Facebook, <a href=\"https:\/\/kinsta.com\/it\/blog\/statistiche-twitter\/\">Twitter<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/statistiche-linkedin\/\">LinkedIn<\/a>, Google, <a href=\"https:\/\/kinsta.com\/it\/blog\/git-per-lo-sviluppo-web\/\">Bitbucket, GitHub e GitLab<\/a>.<\/p>\n<h3>Installazione<\/h3>\n<p>Possiamo installarlo tramite Composer:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/socialite<\/code><\/pre>\n<h3>Installazione e Utilizzo<\/h3>\n<p>Dopo averlo installato, dobbiamo aggiungere le credenziali del provider OAuth che la nostra applicazione utilizza. Le aggiungeremo in <strong>config\/services.php<\/strong> per ogni servizio.<\/p>\n<p>Nella configurazione, dobbiamo abbinare la chiave ai servizi precedenti. Alcune di queste chiavi sono:<\/p>\n<ul>\n<li>facebook<\/li>\n<li>twitter (per OAuth 1.0)<\/li>\n<li>twitter-oauth-2 (per 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>La configurazione di un servizio pu\u00f2 assomigliare a questa:<\/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>Autenticare gli Utenti<\/h3>\n<p>Per questa azione avremo bisogno di due route, una per reindirizzare l&#8217;utente al provider OAuth:<\/p>\n<pre><code class=\"language-php\">use Laravel\\Socialite\\Facades\\Sociliate;\n\nRoute::get('\/auth\/redirect', function () {\n    return Socialite::driver('google')-&gt;redirect();\n});<\/code><\/pre>\n<p>e una per il callback dal provider dopo l&#8217;autenticazione:<\/p>\n<pre><code class=\"language-php\">use Laravel\\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 fornisce il metodo di reindirizzamento e la facade reindirizza l&#8217;utente al provider OAuth, mentre il metodo utente esamina la richiesta in arrivo e recupera le informazioni dell&#8217;utente.<\/p>\n<p>Dopo aver ricevuto il nostro utente, dobbiamo verificare se esiste nel nostro database e autenticarlo. Se non esiste, creeremo un nuovo record per rappresentare l&#8217;utente:<\/p>\n<pre><code class=\"language-php\">use App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Laravel\\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>Se vogliamo limitare gli ambiti di accesso dell&#8217;utente, possiamo usare il metodo <code>scopes<\/code>, che includeremo nella richiesta di autenticazione. Questo metodo unir\u00e0 tutti gli ambiti specificati in precedenza con quelli specificati.<\/p>\n<p>Un&#8217;alternativa \u00e8 quella di usare il metodo <code>setScopes<\/code> che sovrascrive ogni altro ambito esistente:<\/p>\n<pre><code class=\"language-php\">use Laravel\\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>Ora che sappiamo tutto e come richiamare un utente dopo il callback, vediamo alcuni dei dati che possiamo ottenere da esso.<\/p>\n<p>L&#8217;utente OAuth1 ha <code>token<\/code> e <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>L\u2019utente OAuth2 fornisce <code>token<\/code>, <code>refreshToken<\/code> e <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>Sia OAuth1 che OAuth2 forniscono <code>getId<\/code>, <code>getNickname<\/code>, <code>getName<\/code>, <code>getEmail<\/code> e <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>E se vogliamo ottenere i dettagli dell&#8217;utente da un token (OAuth 2) o da un token segreto (OAuth 1), Socialite fornisce due metodi per farlo: <code>userFromToken<\/code> e <code>userFromTokenAndSecret<\/code>:<\/p>\n<pre><code class=\"language-php\">use Laravel\\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 \u00e8 un sistema di autenticazione leggero per SPA (Single Page Application) e applicazioni mobili. Consente agli utenti di generare pi\u00f9 token API con scopi specifici. Questi ambiti specificano le azioni consentite da un token.<\/p>\n<h3>Utilizzi<\/h3>\n<p>Sanctum si pu\u00f2 usare per rilasciare token API all&#8217;utente senza le complessit\u00e0 di OAuth. Questi token hanno in genere scadenze lunghe, anche di anni, ma possono essere revocati e rigenerati dall&#8217;utente in qualsiasi momento.<\/p>\n<h3>Installazione e Configurazione<\/h3>\n<p>Possiamo installarlo tramite Composer:<\/p>\n<pre><code class=\"language-php\">composer require laravel\/sanctum<\/code><\/pre>\n<p>E dobbiamo pubblicare i file di configurazione e di migrazione:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"Laravel\\Sanctum\\SanctumServiceProvider\"<\/code><\/pre>\n<p>Ora che abbiamo generato i nuovi file di migrazione, dobbiamo migrarli:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh<\/code><\/pre>\n<h3>Come Rilasciare i Token API<\/h3>\n<p>Prima di rilasciare i token, il nostro modello Utente deve usare il tratto <strong>Laravel\\Sanctum\\HasApiTokens<\/strong>:<\/p>\n<pre><code class=\"language-php\">use Laravel\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticable\n{\n    use HasApiTokens;\n}<\/code><\/pre>\n<p>Quando abbiamo l&#8217;utente, possiamo rilasciare un token chiamando il metodo <code>createToken<\/code>, che restituisce un&#8217;istanza <strong>Laravel\\Sanctum\\NewAccessToken<\/strong>.<\/p>\n<p>Possiamo chiamare il metodo <code>plainTextToken<\/code> sull&#8217;istanza <strong>NewAccessToken<\/strong> per vedere il valore <strong>SHA-256<\/strong> in chiaro del token.<\/p>\n<h2>Consigli e Buone Pratiche per l&#8217;Autenticazione in Laravel<\/h2>\n<h3>Invalidare le Sessioni su Altri Dispositivi<\/h3>\n<p>Come abbiamo detto in precedenza, l&#8217;invalidazione della sessione \u00e8 fondamentale quando l&#8217;utente si disconnette, ma dovrebbe essere un&#8217;opzione disponibile anche per tutti i dispositivi posseduti.<\/p>\n<p>Questa funzione viene solitamente utilizzata quando l&#8217;utente cambia o aggiorna la propria password e vogliamo invalidare la sua sessione da qualsiasi altro dispositivo.<\/p>\n<p>Con la facade Auth, si tratta di un compito facile da realizzare. Considerando che il percorso che stiamo utilizzando ha i metodi <code>auth<\/code> e <code>auth.session middleware<\/code>, possiamo usare il metodo statico <code>logoutOtherDevices<\/code> della facade:<\/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>Configurazione con Auth::routes()<\/h3>\n<p>Il metodo routes della facade Auth \u00e8 solo un supporto per generare tutte le route necessarie per l&#8217;autenticazione degli utenti.<\/p>\n<p>I percorsi includono Login (Get, Post), Logout (Post), Register (Get, Post) e Password Reset\/Email (Get, Post).<\/p>\n<p>Quando chiamate il metodo sulla facade, questo esegue le seguenti operazioni:<\/p>\n<pre><code class=\"language-php\">public static function 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>Ci interessa sapere cosa succede quando il metodo statico viene chiamato sul router. Questo pu\u00f2 essere complicato a causa del funzionamento delle facades, ma il metodo seguente viene chiamato in questo modo:<\/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', 'Auth\\LoginController@showLoginForm')-&gt;name('login');\n    $this-&gt;post('login', 'Auth\\LoginController@login');\n    $this-&gt;post('logout', 'Auth\\LoginController@logout')-&gt;name('logout');\n\n    \/\/ Registration Routes...\n    if ($options['register'] ?? true) {\n        $this-&gt;get('register', 'Auth\\RegisterController@showRegistrationForm')-&gt;name('register');\n        $this-&gt;post('register', 'Auth\\RegisterController@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>Per impostazione predefinita, genera tutti i percorsi oltre a quello di verifica dell&#8217;email. Avremo sempre i percorsi Login e Logout, ma gli altri possono essere controllati attraverso l&#8217;array delle opzioni.<\/p>\n<p>Se vogliamo avere solo login\/logout e registrazione, possiamo passare il seguente array di opzioni:<\/p>\n<pre><code class=\"language-php\">$options = [\"register\" =&gt; true, \"reset\" =&gt; false, \"verify\" =&gt; false];<\/code><\/pre>\n<h3>Proteggere le Route e le Protezioni Personalizzate<\/h3>\n<p>Vogliamo assicurarci che alcune route siano accessibili solo agli utenti autenticati e questo si pu\u00f2 fare chiamando il metodo middleware sulla facade Route o concatenando il metodo middleware su di essa:<\/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>Questa protezione assicura che le richieste in arrivo siano autenticate.<\/p>\n<h3>Conferma della Password<\/h3>\n<p>Per una maggiore <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\">sicurezza del sito web<\/a>, spesso si desidera confermare la password di un utente prima di procedere con qualsiasi altra attivit\u00e0.<\/p>\n<p>Dobbiamo definire un percorso dalla vista Conferma password per gestire la richiesta. Questo percorso convalider\u00e0 e reindirizzer\u00e0 l&#8217;utente alla destinazione prevista. Allo stesso tempo, ci assicureremo che la nostra password venga confermata nella sessione. Per impostazione predefinita, la password deve essere riconfermata ogni tre ore, ma \u00e8 possibile modificarla nel file di configurazione <strong>config\/auth.php<\/strong>:<\/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>Contratto Authenticable<\/h3>\n<p>Il contratto Authenticable che si trova in Illuminate\\Contracts\\Auth definisce un modello di ci\u00f2 che la facade UserProvider deve implementare:<\/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>L&#8217;interfaccia permette al sistema di autenticazione di lavorare con qualsiasi classe &#8220;utente&#8221; che la implementi.<\/p>\n<p>Questo vale indipendentemente dai livelli ORM o di archiviazione utilizzati. Per impostazione predefinita, Laravel ha l&#8217;App\\Models\\User che implementa questa interfaccia, come si pu\u00f2 vedere anche nel file di configurazione:<\/p>\n<pre><code class=\"language-php\">return [\n    'providers' =&gt; [\n        'users' =&gt; [\n            'driver' =&gt; 'eloquent',\n            'model' =&gt; App\\Models\\User::class,\n        ],\n     ],\n];<\/code><\/pre>\n<h3>Eventi di Autenticazione<\/h3>\n<p>Ci sono molti eventi che vengono inviati durante l&#8217;intero processo di autenticazione.<\/p>\n<p>A seconda dei vostri obiettivi, potete collegare dei listener a questi eventi nel vostro sito <code>EventServiceProvider<\/code>.<\/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=\"Un elenco di listener Laravel generati per il nostro servizio di autenticazione\" width=\"1003\" height=\"1999\"><\/a><figcaption class=\"wp-caption-text\">Un elenco di listener Laravel generati per il nostro servizio di autenticazione<\/figcaption><\/figure>\n<h3>Creare Rapidamente Nuovi Utenti<\/h3>\n<p>La creazione rapida di un nuovo utente pu\u00f2 essere effettuata tramite <strong>App\\User<\/strong>:<\/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>Oppure attraverso il metodo create static della facade User:<\/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>Riepilogo<\/h2>\n<p>L&#8217;ecosistema di Laravel offre numerosi starter kit implementare nella vostra app un sistema di autenticazione, come Breeze e Jetstream. Sono altamente personalizzabili perch\u00e9 il codice viene generato da noi e possiamo modificarlo a piacimento, usandolo all&#8217;occorrenza come template.<\/p>\n<p>Ci sono molti problemi di sicurezza per la complessit\u00e0 dell&#8217;autenticazione, ma tutti questi problemi possono essere risolti grazie agli strumenti disponibili per Laravel. Questi strumenti sono personalizzabili e semplici da usare.<\/p>\n<p>Per le vostre applicazioni, scegliete il nostro veloce ed efficiente servizio di hosting Laravel. E con la nostra <a href=\"https:\/\/kinsta.com\/it\/registrazione\/?product_type=app-db\">prova gratuita<\/a>, potrete osservare la vostra applicazione Laravel in azione senza rischi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;autenticazione \u00e8 una delle caratteristiche essenziali delle applicazioni web. I framework web come Laravel offrono agli utenti diversi modi per autenticarsi. \u00c8 possibile implementare le funzioni &#8230;<\/p>\n","protected":false},"author":267,"featured_media":67641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26020],"class_list":["post-67640","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>Guida Completa all&#039;Autenticazione in Laravel<\/title>\n<meta name=\"description\" content=\"Migliora la sicurezza della tua applicazione web con l&#039;autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.\" \/>\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\/it\/blog\/autenticazione-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guida Completa all&#039;Autenticazione in Laravel\" \/>\n<meta property=\"og:description\" content=\"Migliora la sicurezza della tua applicazione web con l&#039;autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\" \/>\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=\"2023-03-30T13:41:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-01T15:52:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Migliora la sicurezza della tua applicazione web con l&#039;autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.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=\"Coman Cosmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\"},\"author\":{\"name\":\"Coman Cosmin\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\"},\"headline\":\"Guida Completa all&#8217;Autenticazione in Laravel\",\"datePublished\":\"2023-03-30T13:41:52+00:00\",\"dateModified\":\"2025-09-01T15:52:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\"},\"wordCount\":2988,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\",\"name\":\"Guida Completa all'Autenticazione in Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg\",\"datePublished\":\"2023-03-30T13:41:52+00:00\",\"dateModified\":\"2025-09-01T15:52:00+00:00\",\"description\":\"Migliora la sicurezza della tua applicazione web con l'autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guida Completa all&#8217;Autenticazione in Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.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:\/\/kinsta.com\/it\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\",\"name\":\"Coman Cosmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/comancosmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Guida Completa all'Autenticazione in Laravel","description":"Migliora la sicurezza della tua applicazione web con l'autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.","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\/it\/blog\/autenticazione-laravel\/","og_locale":"it_IT","og_type":"article","og_title":"Guida Completa all'Autenticazione in Laravel","og_description":"Migliora la sicurezza della tua applicazione web con l'autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.","og_url":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-03-30T13:41:52+00:00","article_modified_time":"2025-09-01T15:52:00+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","type":"image\/jpeg"}],"author":"Coman Cosmin","twitter_card":"summary_large_image","twitter_description":"Migliora la sicurezza della tua applicazione web con l'autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Coman Cosmin","Tempo di lettura stimato":"17 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/"},"author":{"name":"Coman Cosmin","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da"},"headline":"Guida Completa all&#8217;Autenticazione in Laravel","datePublished":"2023-03-30T13:41:52+00:00","dateModified":"2025-09-01T15:52:00+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/"},"wordCount":2988,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/","url":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/","name":"Guida Completa all'Autenticazione in Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","datePublished":"2023-03-30T13:41:52+00:00","dateModified":"2025-09-01T15:52:00+00:00","description":"Migliora la sicurezza della tua applicazione web con l'autenticazione di Laravel. Apprendi le best practice della sicurezza per garantire accessi sicuri.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/laravel-queue.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/autenticazione-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/it\/argomenti\/laravel\/"},{"@type":"ListItem","position":3,"name":"Guida Completa all&#8217;Autenticazione in Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.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:\/\/kinsta.com\/it\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da","name":"Coman Cosmin","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/comancosmin\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/67640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/267"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=67640"}],"version-history":[{"count":16,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/67640\/revisions"}],"predecessor-version":[{"id":81804,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/67640\/revisions\/81804"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/67640\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/67641"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=67640"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=67640"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=67640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}