{"id":231728,"date":"2023-01-11T10:34:00","date_gmt":"2023-01-11T07:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231728"},"modified":"2022-12-25T18:53:51","modified_gmt":"2022-12-25T15:53:51","slug":"saa-haer-skapar-du-en-firebase-inloggning-och-registrerar-dig-i-react","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/saa-haer-skapar-du-en-firebase-inloggning-och-registrerar-dig-i-react\/","title":{"rendered":"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React"},"content":{"rendered":"\n<p>Firebase \u00e4r ett system som erbjuder m\u00e5nga plattformar f\u00f6r utvecklare att bygga webbappar. En av de v\u00e4sentliga elementen i en app \u00e4r att skapa anv\u00e4ndare och l\u00e5ta dem logga in. L\u00e5t oss se hur vi kan skriva en Firebase-inloggning som \u00e4r komplett men \u00e4nd\u00e5 v\u00e4ldigt enkel att implementera.<\/p>\n<h2>Skapa din Firebase-app<\/h2>\n<p>Du m\u00e5ste f\u00f6rst skapa ett Firebase-appprojekt s\u00e5 g\u00e5 \u00f6ver till Firebase-konsolen och l\u00e4gg till ett nytt projekt. Du l\u00e4gger till appen h\u00e4r.<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>Det kommer att starta en assistent som fr\u00e5gar dig namnet p\u00e5 projektet.<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>N\u00e4sta sk\u00e4rm kommer att fr\u00e5ga dig om du vill aktivera analys. St\u00e4ng av den och klicka p\u00e5 knappen <strong>Skapa projekt .<\/strong> Det kommer att ta ett tag att tillhandah\u00e5lla ditt projekt och efter det f\u00e5r du en knapp f\u00f6r att <strong>forts\u00e4tta<\/strong> som tar dig till projekt\u00f6versikten.<\/p>\n<p>Du m\u00e5ste nu l\u00e4gga till en Firebase-app i Firebase-projektet. \u00c4r vettigt? Ett Firebase-projekt l\u00e5ter dig inneh\u00e5lla flera Firebase-appar f\u00f6r iOS, Android, Web och Unity. L\u00e5t oss nu skapa en webbapp eftersom vi kommer att anv\u00e4nda React f\u00f6r att skapa v\u00e5r Firebase-inloggning.<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>Du kommer att bli ombedd att namnge den h\u00e4r appen och du kommer att f\u00e5 nycklarna som du beh\u00f6ver anv\u00e4nda f\u00f6r att ansluta till Firebase. De kommer att se ut ungef\u00e4r s\u00e5 h\u00e4r:<\/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>Vi kommer att anv\u00e4nda dessa nycklar i v\u00e5r <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React-<\/a> app f\u00f6r att konfigurera en leverant\u00f6r som till\u00e5ter oss att komma \u00e5t Firebase i vilken komponent som helst under leverant\u00f6ren.<\/p>\n<p>Slutligen, g\u00e5 till <strong>Autentisering<\/strong> i det v\u00e4nstra sidof\u00e4ltet, fliken <strong>Inloggningsmetod<\/strong> och aktivera e- <strong>post-\/l\u00f6senordsautentisering<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>Du \u00e4r redo!<\/p>\n<h2>Installera Firebase-beroenden<\/h2>\n<p>Firebase \u00e4r tillg\u00e4ngligt f\u00f6r olika stackar, inklusive <a href=\"https:\/\/startfunction.com\/category\/javascript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JavaScript<\/a> och <a href=\"https:\/\/startfunction.com\/tag\/node-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js<\/a> vilket \u00e4r vad vi ska anv\u00e4nda nu. Vi kommer bara att installera tv\u00e5 beroenden med 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>, som ger oss tillg\u00e5ng till saker som <code>auth<\/code>biblioteket, som vi kommer att anv\u00e4nda f\u00f6r att utf\u00f6ra inloggningen och \u00e4ven skapa en ny anv\u00e4ndare<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/reactfire\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>reactfire<\/code><\/a>, en samling anv\u00e4ndbara verktyg f\u00f6r att arbeta med Firebase i React. Vi anv\u00e4nder dem <code>useFirebaseApp<\/code>f\u00f6r att ansluta till sammanhanget och komma \u00e5t Firebase<\/li>\n<\/ul>\n<p>L\u00e5t oss installera dem med<\/p>\n<pre><code>npm i firebase reactfire<\/code><\/pre>\n<p>Strukturen f\u00f6r <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React-<\/a> appen kommer att vara mycket enkel, enligt f\u00f6ljande:<\/p>\n<pre><code>|-- index.js\n|-- App.js\n|-- FirebaseUser\n    |-- index.js<\/code><\/pre>\n<p>och de kommer att vara relaterade enligt f\u00f6ljande:<\/p>\n<pre><code>index.js --import--&gt; .\/App.js --import--&gt; .\/FirebaseUser<\/code><\/pre>\n<h2>Konfigurera Firebase-leverant\u00f6ren<\/h2>\n<p>L\u00e5t oss skriva den f\u00f6rsta filen f\u00f6r Firebase-inloggning och registrering! Vi beh\u00f6ver faktiskt inte skriva det, eftersom detta b\u00f6r l\u00e4ggas till i filen d\u00e4r du utf\u00e4rdar <code>ReactDOM.render()<\/code>, i v\u00e5rt fall blir det <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>Detta importerar <code>FirebaseAppProvider<\/code>och l\u00e4gger till konfigurationsnycklarna du skickar till den. Du kan nu sl\u00e5 in rotkomponenten, som i v\u00e5rt fall \u00e4r <code>App<\/code>hos leverant\u00f6ren:<\/p>\n<pre><code>ReactDOM.render(, document.getElementById('root')\n);<\/code><\/pre>\n<p>Bra! Nu kommer alla komponenterna nedan att kunna komma \u00e5t Firebase!<\/p>\n<h2>Anv\u00e4nd Firebase-inloggnings- och registreringskomponenten<\/h2>\n<p>L\u00e5t oss nu skriva <code>App<\/code>komponenten d\u00e4r vi ska importera och anv\u00e4nda <code>FirebaseUser<\/code>komponenten f\u00f6r att skapa och logga in en anv\u00e4ndare. Det finns inget riktigt <a href=\"https:\/\/startfunction.com\/tag\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase<\/a> &#8211; relaterat h\u00e4r. Vi kommer att implementera en inloggning och registrering med samma komponent s\u00e5 att du kan se hur vi kan \u00e5teranv\u00e4nda koden, s\u00e5 i den h\u00e4r komponenten kommer vi att implementera ett par knappar som n\u00e4r de klickas, \u00e5terger <code>FirebaseUser<\/code>i ett inloggningsl\u00e4ge eller en registreringsl\u00e4ge:<\/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>Konfigurera Firebase-inloggningen och registrera dig<\/h2>\n<p>Vi skapar en komponent f\u00f6r detta. Vi m\u00e5ste f\u00f6rst importera n\u00e5gra moduler:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport { useFirebaseApp } from 'reactfire';\nimport 'firebase\/auth';<\/code><\/pre>\n<p>Vi tar <code>useState<\/code>n\u00e5gra saker, fr\u00e5n att veta om anv\u00e4ndaren \u00e4r autentiserad till att st\u00e4lla in fel. Vi kommer att anv\u00e4nda <code>useFirebaseApp<\/code>kroken f\u00f6r att komma \u00e5t Firebase-anslutningen. Detta \u00e4r bara m\u00f6jligt eftersom vi konfigurerade Firebase-leverant\u00f6ren i f\u00f6reg\u00e5ende steg, och den \u00e4r endast tillg\u00e4nglig under hierarkin d\u00e4r den lades till. Slutligen kommer vi att importera <code>auth<\/code>biblioteket s\u00e5 att vi kan anropa Firebase-metoderna f\u00f6r att skapa anv\u00e4ndare och logga in. Detta \u00e4r ett effektivt s\u00e4tt eftersom vi bara laddar det h\u00e4r biblioteket, och inte andra som <code>firestore<\/code>f\u00f6r NoSQL-databasen eller <code>messaging<\/code>f\u00f6r meddelanden och aviseringar.<\/p>\n<p>D\u00e4refter l\u00e4gger vi till en snabbkrok f\u00f6r att hantera v\u00e5ra inmatningsf\u00e4lt:<\/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>Och slutligen hela komponenten, som vi kommer att dela upp nedan f\u00f6r att peka p\u00e5 de mest intressanta delarna, de som \u00e4r relaterade till Firebase-inloggningen och registreringen.<\/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>F\u00f6rst kopplar vi till Firebase-instansen:<\/p>\n<pre><code>const firebase = useFirebaseApp();<\/code><\/pre>\n<p>Som n\u00e4mnts tidigare \u00e4r detta m\u00f6jligt eftersom vi tidigare slog in <code>App<\/code>komponenten med Firebase-leverant\u00f6ren. Nu n\u00e4r vi \u00e4r anslutna till Firebase kan vi anv\u00e4nda <code>auth<\/code>funktionen och anropa <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>N\u00e4r det lyckas kommer det att st\u00e4lla in de returnerade data och formul\u00e4rf\u00e4lten kommer att ers\u00e4ttas med<\/p>\n<pre><code>Logged in as ${ auth?.user.email ?? '' }<\/code><\/pre>\n<p>Den data som returneras \u00e4r ett stort objekt med mycket intressanta egenskaper s\u00e5 det \u00e4r v\u00e4rt att l\u00e4gga till en <code>console.log()<\/code>i v\u00e5r <code>setReceivedData()<\/code>funktion f\u00f6r att se vad mer den inneh\u00e5ller.<\/p>\n<p>Processen f\u00f6r att skapa en anv\u00e4ndare \u00e4r liknande, f\u00f6rutom att vi anv\u00e4nder funktionen <code>createUserWithEmailAndPassword()<\/code>.<\/p>\n<h2>Slutsats<\/h2>\n<p>F\u00f6r att testa v\u00e5r Firebase-inloggning och registrera dig kan du testa att logga in f\u00f6r en anv\u00e4ndare som inte finns s\u00e5 att du kan se felen. D\u00e4refter skapar du en anv\u00e4ndare och loggar sedan in som anv\u00e4ndare.<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>Demo av Firebase-inloggningen och registrera dig.<br \/>\nKul fakta: Chrome klagar \u00f6ver att l\u00f6senordet 123456 som jag anv\u00e4nder f\u00f6r testning \u00e4r \u00e4ventyrat, vilket \u00e4r sant.<\/p>\n<p>Om du nu g\u00e5r tillbaka till Firebase-appen &gt; Autentisering &gt; Anv\u00e4ndare ser du den nya anv\u00e4ndaren (du kan beh\u00f6va anv\u00e4nda uppdateringsknappen bredvid L\u00e4gg till anv\u00e4ndare).<\/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=\"S\u00e5 h\u00e4r skapar du en Firebase-inloggning och registrerar dig i React\" ><\/a><\/p>\n<p>F\u00f6r att sammanfatta \u00e4r de v\u00e4sentliga stegen f\u00f6r att integrera Firebase i v\u00e5r React-app:<\/p>\n<ul>\n<li>st\u00e4ll in Firebase-leverant\u00f6ren och sl\u00e5 in rotkomponenten (eller roten i hierarkin d\u00e4r du vill anv\u00e4nda den)<\/li>\n<li>koppla till Firebase-leverant\u00f6ren med hj\u00e4lp av<code>useFirebaseApp<\/code><\/li>\n<li>anv\u00e4nd autentiseringsfunktionerna!<\/li>\n<\/ul>\n<p>Kontrollera GitHub-f\u00f6rr\u00e5det p\u00e5 <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>. Den enda skillnaden med den h\u00e4r \u00e4r att jag laddar nycklarna f\u00f6r att konfigurera Firebase fr\u00e5n en .env-fil f\u00f6r att undvika att exponera dem offentligt.<\/p>\n<p>Om du har n\u00e5gra fr\u00e5gor, l\u00e5t mig veta i kommentarerna nedan!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00e4r dig hur du skapar en Firebase-inloggning och registrerar dig i React med hj\u00e4lp av krokar.<\/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":[838,848,901,755,787,724],"tags":[1173],"class_list":["post-231728","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-oeppen-kaella","category-programvara-med-oeppen-kaellkod","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231728"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231728\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/157702"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}