{"id":23305,"date":"2021-04-27T13:33:00","date_gmt":"2021-04-27T10:33:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=23305"},"modified":"2021-10-18T03:22:41","modified_gmt":"2021-10-18T00:22:41","slug":"sistema-di-accesso-social-utilizzando-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/sistema-di-accesso-social-utilizzando-laravel-socialite\/","title":{"rendered":"Sistema di accesso social utilizzando Laravel Socialite"},"content":{"rendered":"<p>Credito: questo articolo \u00e8 ispirato a questo post <a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Social Authentication with Socialite<\/a><\/p>\n<p>Stai cercando di implementare il sistema di accesso social nel tuo sito web Laravel? Consentendo l&#8217;accesso social, i tuoi utenti non devono registrarsi sul tuo sito web. Ci fa anche risparmiare molto lavoro come l&#8217;invio di link di attivazione, verifica dell&#8217;account e-mail. In questo articolo, studiamo come aggiungere il sistema di accesso social usando Laravel socialite.<\/p>\n<p><a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">La<\/a> libreria <a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Socialite<\/a> fornisce l&#8217;autenticazione OAuth con Facebook, Twitter, Google, LinkedIn, GitHub e Bitbucket. Quello che dobbiamo fare \u00e8 installare questa libreria nel nostro sito Web Laravel, configurarla, ottenere le chiavi API da un sito social e siamo a posto.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" alt=\"Sistema di accesso social utilizzando Laravel Socialite\" ><\/a><\/p>\n<h3>Crea tabella utenti<\/h3>\n<p>Per implementare il sistema di accesso social, \u00e8 necessario creare una tabella utenti che memorizzer\u00e0 i dettagli forniti dal sito social.<\/p>\n<p>Se hai una nuova installazione di Laravel, apri lo strumento da riga di comando nella directory principale di un progetto ed esegui il comando <code>php artisan make:auth<\/code>. Questo comando creer\u00e0 controller di autenticazione come LoginController, RegisterController, ecc. che si trovano nella directory app\/Http\/Controllers\/Auth. Crea anche una vista login.blade.php, register.blade.php nella directory resource\/view\/auth.<\/p>\n<p>Quindi, apri la tabella Migrazione per utenti. Modificheremo questa migrazione predefinita e aggiungeremo altre due colonne denominate provider e provider_id.<\/p>\n<pre><code>public function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Come vedi, impostiamo le colonne email e password su nullable. Perch\u00e9? Quando utilizziamo l&#8217;autenticazione dell&#8217;accesso social non vi \u00e8 alcuna garanzia di ottenere un ID e-mail di un utente. E anche la password non \u00e8 necessaria in questo caso. Quindi manteniamo email e password annullabili. Il provider della colonna memorizzer\u00e0 il nome del sito social come facebook, twitter, ecc. La colonna provider_id memorizzer\u00e0 l&#8217;id social di un utente relativo al sito social.<\/p>\n<p>Dopo aver modificato la migrazione dell&#8217;utente come sopra, esegui il comando <code>php artisan migrate<\/code>. Creer\u00e0 una tabella chiamata &quot;utenti&quot; nel tuo database.<\/p>\n<p>Probabilmente, durante l&#8217;esecuzione del comando di migrazione otterrai qualche strano errore relativo alla lunghezza dei caratteri. In tal caso, apri il file AppServiceProvider.php dalla directory app\/Providers. In questo file, \u00e8 necessario impostare la lunghezza della stringa predefinita per le colonne della tabella di un database.<\/p>\n<p>File AppServiceProvider.php<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse IlluminateSupportServiceProvider;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass AppServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Bootstrap any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::defaultStringLength(255);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function register()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Modello utente<\/h3>\n<p>Per impostazione predefinita, Laravel include un modello AppUser Eloquent nella directory dell&#8217;app. Apri User.php dalla cartella dell&#8217;app. Aggiungi altre due colonne provider, provider_id alla variabile $fillable.<\/p>\n<pre><code>protected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id',\n];<\/code><\/pre>\n<h3>Installa e configura Laravel Socialite<\/h3>\n<p>Per installare questa libreria, dovresti avere il <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">compositore<\/a> installato sul tuo sistema.<\/p>\n<p>Nel tuo strumento da riga di comando esegui il comando seguente.<\/p>\n<p><code>composer require laravel\/socialite<\/code><\/p>\n<p>Dopo aver installato la libreria, registra LaravelSocialiteSocialiteServiceProvider nel tuo file di configurazione config\/app.php.<\/p>\n<pre><code>'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\/\/ Other service providers...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre>\n<p>Nello stesso file config\/app.php, sotto l&#8217;array degli alias, aggiungi Socialite facciata.<\/p>\n<pre><code>'Socialite' =&gt; LaravelSocialiteFacadesSocialite::class,<\/code><\/pre>\n<p>Ora \u00e8 il momento di registrare la tua applicazione sul sito social. Ad esempio, supponiamo che tu voglia implementare l&#8217;autenticazione dell&#8217;accesso a Facebook. Quindi vai avanti e <a href=\"https:\/\/developers.facebook.com\/docs\/apps\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crea un&#8217;applicazione su Facebook<\/a>.<\/p>\n<p>Una volta che sei pronto con l&#8217;ID app, il segreto dell&#8217;app della tua applicazione Facebook, apri il file config\/services.php e aggiungi il codice sottostante.<\/p>\n<pre><code>'facebook' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('FB_APP_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('FB_APP_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('FB_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Come mostrato nel codice sopra, dobbiamo memorizzare i dettagli della nostra applicazione e l&#8217;URL di richiamata nel file .env.<\/p>\n<pre><code>FB_APP_ID=PASTE_APP_ID_HERE\nFB_APP_SECRET=PASTE_APP_SECRET_HERE\nFB_CALLBACK_URL=YOU_SITE_URL\/login\/facebook\/callback<\/code><\/pre>\n<p>Abbiamo passato l&#8217;URL di richiamata come YOU_SITE_URL\/login\/facebook\/callback. Ora \u00e8 il momento di creare due percorsi, uno per reindirizzare l&#8217;utente al provider OAuth (nel nostro caso, Facebook) e un altro per ricevere la richiamata dal provider dopo l&#8217;autenticazione.<\/p>\n<h3>Codice effettivo per la gestione di OAuth<\/h3>\n<p>A questo punto, abbiamo completato tutte le impostazioni per Laravel Socialite. \u00c8 ora di scrivere del codice che gestisca il reindirizzamento OAuth e recuperi i dettagli dell&#8217;utente.<\/p>\n<p>Apri il tuo file login.blade.php e inserisci il codice sottostante probabilmente dopo il pulsante di invio.<\/p>\n<pre><code>&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6 col-md-offset-4\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Login with\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;&lt;i class=\"fa fa-facebook-official\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Facebook&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/twitter') }}\"&gt;&lt;i class=\"fa fa-twitter\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Twitter&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/github') }}\"&gt;&lt;i class=\"fa fa-github\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Github&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Qui, stiamo aggiungendo un collegamento per Github e Twitter. I passaggi per l&#8217;aggiunta di OAuth per questi siti social sono gli stessi di Facebook. Devi solo creare un&#8217;applicazione dei rispettivi siti social e memorizzare quei dettagli nello stesso modo in cui abbiamo aggiunto per Facebook.<\/p>\n<p>Nel tuo file di percorso, definisci i percorsi come di seguito.<\/p>\n<pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<p>Quindi, vai su app\/Http\/Controllers\/Auth\/LoginController.php e modifica il file. Dovresti aggiungere il codice seguente al suo interno.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllersAuth;\n\u00a0\nuse AppHttpControllersController;\nuse IlluminateFoundationAuthAuthenticatesUsers;\nuse Socialite;\nuse AppUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the GitHub authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;scopes(['email'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from GitHub.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Il metodo redirectToProvider reindirizza l&#8217;utente alla pagina di accesso di un sito social. Una volta che l&#8217;utente ha autorizzato l&#8217;applicazione, recuperiamo le informazioni dell&#8217;utente nella funzione handleProviderCallback. Se l&#8217;utente non esiste con il nostro sistema, aggiungiamo i suoi dettagli utilizzando il metodo findOrCreateUser.<\/p>\n<p>Ci auguriamo che tu sia venuto a conoscenza del sistema di accesso social utilizzando Laravel Socialite. Se hai domande o suggerimenti, lascia un commento qui sotto.<\/p>\n<h4>articoli Correlati<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/come-utilizzare-la-funzionalita-di-connessioni-multiple-di-database-di-laravel-su-un-sito-web\/\" title=\"Come utilizzare la funzionalit\u00e0 di connessioni multiple di database di Laravel su un sito Web?\">Come utilizzare la funzionalit\u00e0 di connessioni multiple di database di Laravel su un sito Web?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/crea-un-sito-web-multilingue-in-php-utilizzando-laravel-framework\/\" title=\"Crea un sito Web multilingue in PHP utilizzando Laravel Framework\">Crea un sito Web multilingue in PHP utilizzando Laravel Framework<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se stai cercando di aggiungere un sistema di accesso social nel tuo sito web Laravel, allora Laravel Socialite \u00e8 una libreria che ci aiuta a configurare questo sistema.<\/p>\n","protected":false},"author":1,"featured_media":21626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[179,500],"tags":[846],"class_list":["post-23305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chrome-7","category-laravel","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/23305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=23305"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/23305\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/21626"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=23305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=23305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=23305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}