{"id":232415,"date":"2023-01-11T10:09:00","date_gmt":"2023-01-11T07:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232415"},"modified":"2022-11-10T09:21:03","modified_gmt":"2022-11-10T06:21:03","slug":"come-creare-un-accesso-firebase-e-registrarsi-in-react","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-creare-un-accesso-firebase-e-registrarsi-in-react\/","title":{"rendered":"Come creare un accesso Firebase e registrarsi in React"},"content":{"rendered":"\n<p>Firebase \u00e8 un sistema che offre agli sviluppatori molte piattaforme per creare app web. Uno degli elementi essenziali in un&#8217;app \u00e8 creare utenti e consentire loro di accedere. Vediamo come possiamo scrivere un login Firebase che sia completo ma molto semplice da implementare.<\/p>\n<h2>Crea la tua app Firebase<\/h2>\n<p>Devi prima creare un progetto di app Firebase, quindi vai alla console Firebase e aggiungi un nuovo progetto. Aggiungerai l&#8217;app qui.<\/p>\n<p><a href=\"https:\/\/console.firebase.google.com\/u\/0\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/console.firebase.google.com\/<\/a><\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6bffde950b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6bffde950b.png\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>Verr\u00e0 avviato un assistente che ti chieder\u00e0 il nome del progetto.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6bfffb1eed.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6bfffb1eed.png\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>La schermata successiva ti chieder\u00e0 se desideri abilitare l&#8217;analisi. Disattivalo e fai clic sul pulsante <strong>Crea progetto<\/strong>. Ci vorr\u00e0 del tempo per eseguire il provisioning del tuo progetto, dopodich\u00e9 riceverai un pulsante per <strong>continuare<\/strong> che ti porter\u00e0 alla panoramica del progetto.<\/p>\n<p>Ora devi aggiungere un&#8217;app Firebase al progetto Firebase. Ha senso? Un progetto Firebase ti consente di contenere diverse app Firebase per iOS, Android, Web e Unity. Per ora, creiamo un&#8217;app Web poich\u00e9 utilizzeremo React per creare il nostro login Firebase.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c001c1120.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c001c1120.png\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>Ti verr\u00e0 chiesto di nominare questa app e ti verranno fornite le chiavi che dovrai utilizzare per connetterti con Firebase. Sembreranno qualcosa del tipo:<\/p>\n<pre><code>var firebaseConfig = {\n    apiKey: \"1A2B3C4D5E6F7G\",\n    authDomain: \"appname-a123b.firebaseapp.com\",\n    databaseURL: \"https:\/\/appname-a123b.firebaseio.com\",\n    projectId: \"appname-a123b\",\n    storageBucket: \"appname-a123b.appspot.com\",\n    messagingSenderId: \"1234567890\",\n};<\/code><\/pre>\n<p>Utilizzeremo queste chiavi nella nostra app <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> per configurare un provider che ci consentir\u00e0 di accedere a Firebase in qualsiasi componente del provider.<\/p>\n<p>Infine, vai in <strong>Autenticazione<\/strong> nella barra laterale sinistra, <strong>nella scheda Metodo di<\/strong> accesso, e abilita l&#8217; autenticazione tramite e <strong>-mail\/password .<\/strong><\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c00385c64.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c00385c64.png\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>Sei a posto!<\/p>\n<h2>Installa le dipendenze di Firebase<\/h2>\n<p>Firebase \u00e8 disponibile per diversi stack, inclusi <a href=\"https:\/\/startfunction.com\/category\/javascript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JavaScript<\/a> e <a href=\"https:\/\/startfunction.com\/tag\/node-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js<\/a>, che \u00e8 quello che useremo ora. Installeremo solo due dipendenze con npm:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>firebase<\/code><\/a>, che ci consentir\u00e0 di accedere a cose come la <code>auth<\/code>libreria, che utilizzeremo per eseguire l&#8217;accesso e anche per creare un nuovo utente<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/reactfire\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>reactfire<\/code><\/a>, una raccolta di strumenti utili per lavorare con Firebase in React. Li useremo <code>useFirebaseApp<\/code>per connetterci al contesto e accedere a Firebase<\/li>\n<\/ul>\n<p>Installiamoli con<\/p>\n<pre><code>npm i firebase reactfire<\/code><\/pre>\n<p>La struttura dell&#8217;app <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> sar\u00e0 molto semplice, come segue:<\/p>\n<pre><code>|-- index.js\n|-- App.js\n|-- FirebaseUser\n    |-- index.js<\/code><\/pre>\n<p>e saranno correlati come segue:<\/p>\n<pre><code>index.js --import--&gt; .\/App.js --import--&gt; .\/FirebaseUser<\/code><\/pre>\n<h2>Configura il provider Firebase<\/h2>\n<p>Scriviamo il primo file per l&#8217;accesso e la registrazione a Firebase! In realt\u00e0 non abbiamo bisogno di scriverlo, perch\u00e9 questo dovrebbe essere aggiunto al file in cui stai emettendo <code>ReactDOM.render()<\/code>, nel nostro caso sar\u00e0 <code>index.js<\/code>:<\/p>\n<pre><code>import { FirebaseAppProvider } from 'reactfire';\n\nconst firebaseConfig = {\n    apiKey: \"1A2B3C4D5E6F7G\",\n    authDomain: \"appname-a123b.firebaseapp.com\",\n    databaseURL: \"https:\/\/appname-a123b.firebaseio.com\",\n    projectId: \"appname-a123b\",\n    storageBucket: \"appname-a123b.appspot.com\",\n    messagingSenderId: \"925199572988\",\n    appId: \"1:123456789:web:12a34b56c78d90e\"\n};<\/code><\/pre>\n<p>Questo importa <code>FirebaseAppProvider<\/code>e aggiunge le chiavi di configurazione che gli passerai. Ora puoi avvolgere il componente root, che nel nostro caso \u00e8 <code>App<\/code>con il provider:<\/p>\n<pre><code>ReactDOM.render(, document.getElementById('root')\n);<\/code><\/pre>\n<p>Grande! Ora tutti i componenti seguenti potranno accedere a Firebase!<\/p>\n<h2>Utilizza il componente di accesso e registrazione di Firebase<\/h2>\n<p>Scriviamo ora il <code>App<\/code>componente in cui importeremo e utilizzeremo il <code>FirebaseUser<\/code>componente per creare e accedere a un utente. Non c&#8217;\u00e8 nulla di veramente correlato a <a href=\"https:\/\/startfunction.com\/tag\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase<\/a> qui. Implementeremo un accesso e una registrazione usando lo stesso componente in modo da poter vedere come possiamo riutilizzare il codice, quindi in questo componente implementeremo una coppia di pulsanti che, una volta cliccati, renderanno il <code>FirebaseUser<\/code>in una modalit\u00e0 di accesso o un modalit\u00e0 di iscrizione:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport FirebaseUser from '.\/FirebaseUser';\n\nfunction App() {\n  const [ signInOrUp, setSignInOrUp ] = useState( '' );\n  return (Firebase login\n      {\n        signInOrUp?(): (&lt;&gt;\n             setSignInOrUp( 'signin') } &gt;Log in with existing user\n             setSignInOrUp( 'signup') } &gt;Create a new user) }\n\n  );\n}\n\nexport default App;\n<\/code><\/pre>\n<h2>Configura l&#8217;accesso a Firebase e registrati<\/h2>\n<p>Creeremo un componente per questo. Per prima cosa dobbiamo importare alcuni moduli:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport { useFirebaseApp } from 'reactfire';\nimport 'firebase\/auth';<\/code><\/pre>\n<p>Per <code>useState<\/code>alcune cose, dal sapere se l&#8217;utente \u00e8 autenticato per impostare gli errori. Useremo l&#8217; <code>useFirebaseApp<\/code>hook per accedere alla connessione Firebase. Questo \u00e8 possibile solo perch\u00e9 abbiamo configurato il provider Firebase nel passaggio precedente ed \u00e8 disponibile solo nella gerarchia in cui \u00e8 stato aggiunto. Infine, importeremo la <code>auth<\/code>libreria in modo da poter chiamare i metodi Firebase per creare utenti e accedere. Questo \u00e8 un modo efficiente perch\u00e9 stiamo caricando solo questa libreria e non altre come <code>firestore<\/code>per il database NoSQL o <code>messaging<\/code>per messaggi e notifiche.<\/p>\n<p>Successivamente aggiungeremo un rapido hook per gestire i nostri campi di input:<\/p>\n<pre><code>const useField =() =&gt; {\n    const [ value, setValue ] = useState( '' );\n    return { value, onChange: x =&gt; setValue( 'string' === typeof x? x: x.target.value) };\n};<\/code><\/pre>\n<p>E infine il componente completo, che analizzeremo di seguito per indicare le parti pi\u00f9 interessanti, quelle relative al login e alla registrazione di Firebase.<\/p>\n<pre><code>function FirebaseUser ({ action = 'signin' }) {\n    const email = useField();\n    const password = useField();\n    const [ auth, setAuth ] = useState( null );\n    const [ error, setError ] = useState( '' );\n    const firebase = useFirebaseApp();\n    const setReceivedData = data =&gt; setAuth( data );\n    const setReceivedError = error =&gt; setError( error.message );\n\n    const signIn = e =&gt; {\n        e.preventDefault();\n        setError( '' );\n        firebase.auth()\n            .signInWithEmailAndPassword( email.value, password.value) .then( setReceivedData) .catch( setReceivedError );\n    };\n\n    const signUp = e =&gt; {\n        e.preventDefault();\n        setError( '' );\n        firebase.auth()\n            .createUserWithEmailAndPassword( email.value, password.value) .then( setReceivedData) .catch( setReceivedError );\n    };\n\n    const manage = 'signin' === action? {\n            success: `Logged in as ${ auth?.user.email ?? '' }`,\n            method: signIn,\n            label: 'Sign In'\n        }: {\n            success: `Signed up as ${ auth?.user.email ?? '' }`,\n            method: signUp,\n            label: 'Sign Up'\n        };\n\n    return ({\n                auth? ({ manage.success }\n                ): (&lt;&gt;\n\n                            { manage.label }\n                            {\n                                error &amp;&amp; { error }\n                            }) }\n\n    );\n}\n\nexport default FirebaseUser;\n<\/code><\/pre>\n<p>Innanzitutto, ci colleghiamo all&#8217;istanza Firebase:<\/p>\n<pre><code>const firebase = useFirebaseApp();<\/code><\/pre>\n<p>Come accennato in precedenza, ci\u00f2 \u00e8 possibile perch\u00e9 in precedenza abbiamo eseguito il wrapping del <code>App<\/code>componente con il provider Firebase. Ora che siamo collegati a Firebase, possiamo utilizzare la <code>auth<\/code>funzionalit\u00e0 e chiamare <code>signInWithEmailAndPassword<\/code>:<\/p>\n<pre><code>const signIn = e =&gt; {\n        e.preventDefault();\n        setError( '' );\n        firebase.auth()\n            .signInWithEmailAndPassword( email.value, password.value) .then( setReceivedData) .catch( setReceivedError );\n};<\/code><\/pre>\n<p>Quando ha esito positivo, imposter\u00e0 i dati restituiti e i campi del modulo verranno sostituiti con<\/p>\n<pre><code>Logged in as ${ auth?.user.email ?? '' }<\/code><\/pre>\n<p>I dati restituiti sono un oggetto di grandi dimensioni con propriet\u00e0 molto interessanti, quindi vale la pena aggiungere a <code>console.log()<\/code>alla nostra <code>setReceivedData()<\/code>funzione per vedere cos&#8217;altro include.<\/p>\n<p>Il processo per creare un utente \u00e8 simile, tranne per il fatto che utilizziamo la funzione <code>createUserWithEmailAndPassword()<\/code>.<\/p>\n<h2>Conclusione<\/h2>\n<p>Per testare il nostro accesso a Firebase e registrarti, puoi provare ad accedere per un utente che non esiste in modo da poter vedere gli errori. Successivamente, crea un utente e quindi accedi come utente.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c00594d08.gif\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c00594d08.gif\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>Demo dell&#8217;accesso a Firebase e registrati.<br \/>\nCuriosit\u00e0: Chrome si lamenta che la password 123456 che sto usando per il test \u00e8 compromessa, il che \u00e8 vero.<\/p>\n<p>Se ora torni all&#8217;app Firebase &gt; Autenticazione &gt; Utenti, vedrai il nuovo utente (potresti dover utilizzare il pulsante di aggiornamento accanto ad Aggiungi utente).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c007b1816.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157701-61e6c007b1816.png\" alt=\"Come creare un accesso Firebase e registrarsi in React\" ><\/a><\/p>\n<p>Per ricapitolare, i passaggi essenziali per integrare Firebase nella nostra app React sono:<\/p>\n<ul>\n<li>configura il provider Firebase e avvolgi il componente principale (o la radice della gerarchia in cui desideri utilizzarlo)<\/li>\n<li>agganciare al provider Firebase utilizzando<code>useFirebaseApp<\/code><\/li>\n<li>usa le funzioni di autenticazione!<\/li>\n<\/ul>\n<p>Controlla il repository GitHub su <a href=\"https:\/\/github.com\/eliorivero\/firebase-login-sign-up\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/github.com\/eliorivero\/firebase-login-sign-up<\/a>. L&#8217;unica differenza con questo \u00e8 che sto caricando le chiavi per configurare Firebase da un file .env per evitare di esporle pubblicamente.<\/p>\n<p>Se hai domande, fammi sapere nei commenti qui sotto!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scopri come creare un accesso Firebase e registrarsi al sistema in React usando gli hook.<\/p>\n","protected":false},"author":1,"featured_media":157702,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,835,751,783,720,844],"tags":[1168],"class_list":["post-232415","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-guida-per-principianti","category-open-source-projektmanagement-3","category-software-open-source","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=232415"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232415\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/157702"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}