{"id":231634,"date":"2023-01-11T10:47:00","date_gmt":"2023-01-11T07:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231634"},"modified":"2022-12-25T18:53:50","modified_gmt":"2022-12-25T15:53:50","slug":"jak-utworzyc-login-firebase-i-zarejestrowac-sie-w-react","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-utworzyc-login-firebase-i-zarejestrowac-sie-w-react\/","title":{"rendered":"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React"},"content":{"rendered":"\n<p>Firebase to system, kt\u00f3ry oferuje programistom wiele platform do tworzenia aplikacji internetowych. Jednym z podstawowych element\u00f3w aplikacji jest tworzenie u\u017cytkownik\u00f3w i umo\u017cliwienie im logowania. Zobaczmy, jak mo\u017cemy napisa\u0107 login Firebase, kt\u00f3ry jest kompletny, ale bardzo prosty w implementacji.<\/p>\n<h2>Utw\u00f3rz aplikacj\u0119 Firebase<\/h2>\n<p>Najpierw musisz utworzy\u0107 projekt aplikacji Firebase, wi\u0119c przejd\u017a do konsoli Firebase i dodaj nowy projekt. Tutaj dodasz aplikacj\u0119.<\/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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Uruchomi asystenta, kt\u00f3ry zapyta Ci\u0119 o nazw\u0119 projektu.<\/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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Nast\u0119pny ekran zapyta, czy chcesz w\u0142\u0105czy\u0107 analityk\u0119. Wy\u0142\u0105cz go i kliknij przycisk <strong>Utw\u00f3rz projekt<\/strong>. Przygotowanie projektu zajmie troch\u0119 czasu, po czym otrzymasz przycisk <strong>Kontynuuj<\/strong>, kt\u00f3ry przeniesie Ci\u0119 do przegl\u0105du projektu.<\/p>\n<p>Teraz musisz doda\u0107 aplikacj\u0119 Firebase do projektu Firebase. Ma sens? Projekt Firebase pozwala zawiera\u0107 kilka aplikacji Firebase na iOS, Androida, przegl\u0105dark\u0119 internetow\u0105 i Unity. Na razie stw\u00f3rzmy aplikacj\u0119 internetow\u0105, poniewa\u017c b\u0119dziemy u\u017cywa\u0107 Reacta do tworzenia naszego loginu 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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Zostaniesz poproszony o nazwanie tej aplikacji i otrzymasz klucze, kt\u00f3rych b\u0119dziesz potrzebowa\u0107 do \u0142\u0105czenia si\u0119 z Firebase. B\u0119d\u0105 wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/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>U\u017cyjemy tych kluczy w naszej aplikacji <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a>, aby skonfigurowa\u0107 dostawc\u0119, kt\u00f3ry umo\u017cliwi nam dost\u0119p do Firebase w dowolnym komponencie w ramach dostawcy.<\/p>\n<p>Na koniec przejd\u017a do <strong>Uwierzytelniania<\/strong> na lewym pasku bocznym, na karcie <strong>Metoda<\/strong> logowania i w\u0142\u0105cz uwierzytelnianie <strong>e-mail \/ has\u0142o .<\/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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Wszystko gotowe!<\/p>\n<h2>Zainstaluj zale\u017cno\u015bci Firebase<\/h2>\n<p>Firebase jest dost\u0119pny dla r\u00f3\u017cnych stos\u00f3w, w tym <a href=\"https:\/\/startfunction.com\/category\/javascript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JavaScript<\/a> i <a href=\"https:\/\/startfunction.com\/tag\/node-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js<\/a>, z kt\u00f3rych b\u0119dziemy teraz korzysta\u0107. Zamierzamy zainstalowa\u0107 tylko dwie zale\u017cno\u015bci z 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>, co pozwoli nam uzyska\u0107 dost\u0119p do takich rzeczy jak <code>auth<\/code>biblioteka, kt\u00f3rej u\u017cyjemy do wykonania logowania, a tak\u017ce tworzenia nowego u\u017cytkownika<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/reactfire\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>reactfire<\/code><\/a>, zbi\u00f3r przydatnych narz\u0119dzi do pracy z Firebase w React. U\u017cyjemy ich <code>useFirebaseApp<\/code>, aby po\u0142\u0105czy\u0107 si\u0119 z kontekstem i uzyska\u0107 dost\u0119p do Firebase<\/li>\n<\/ul>\n<p>Zainstalujmy je za pomoc\u0105<\/p>\n<pre><code>npm i firebase reactfire<\/code><\/pre>\n<p>Struktura aplikacji <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> b\u0119dzie bardzo prosta i wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<pre><code>|-- index.js\n|-- App.js\n|-- FirebaseUser\n    |-- index.js<\/code><\/pre>\n<p>i b\u0119d\u0105 one powi\u0105zane w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>index.js --import--&gt; .\/App.js --import--&gt; .\/FirebaseUser<\/code><\/pre>\n<h2>Skonfiguruj dostawc\u0119 Firebase<\/h2>\n<p>Napiszmy pierwszy plik do logowania i rejestracji w Firebase! W\u0142a\u015bciwie nie musimy tego pisa\u0107, poniewa\u017c nale\u017cy to doda\u0107 do pliku, w kt\u00f3rym wystawiasz <code>ReactDOM.render()<\/code>, w naszym przypadku b\u0119dzie to <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>Spowoduje to zaimportowanie <code>FirebaseAppProvider<\/code>i dodanie kluczy konfiguracyjnych, kt\u00f3re do niego przeka\u017cesz. Mo\u017cesz teraz owin\u0105\u0107 komponent g\u0142\u00f3wny, kt\u00f3ry w naszym przypadku jest <code>App<\/code>u dostawcy:<\/p>\n<pre><code>ReactDOM.render(, document.getElementById('root')\n);<\/code><\/pre>\n<p>\u015awietny! Teraz wszystkie poni\u017csze komponenty b\u0119d\u0105 mog\u0142y uzyska\u0107 dost\u0119p do Firebase!<\/p>\n<h2>U\u017cyj komponentu logowania i rejestracji Firebase<\/h2>\n<p>Napiszmy teraz <code>App<\/code>komponent, w kt\u00f3rym zaimportujemy i u\u017cyjemy <code>FirebaseUser<\/code>komponentu do utworzenia i zalogowania u\u017cytkownika. Nie ma tu nic zwi\u0105zanego z <a href=\"https:\/\/startfunction.com\/tag\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase<\/a>. Zaimplementujemy logowanie i rejestracj\u0119 przy u\u017cyciu tego samego komponentu, aby\u015b m\u00f3g\u0142 zobaczy\u0107, jak mo\u017cemy ponownie u\u017cy\u0107 kodu, wi\u0119c w tym komponencie zaimplementujemy par\u0119 przycisk\u00f3w, kt\u00f3re po klikni\u0119ciu b\u0119d\u0105 renderowa\u0107 <code>FirebaseUser<\/code>w trybie logowania lub tryb rejestracji:<\/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>Skonfiguruj login Firebase i zarejestruj si\u0119<\/h2>\n<p>Stworzymy do tego komponent. Najpierw musimy zaimportowa\u0107 kilka modu\u0142\u00f3w:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport { useFirebaseApp } from 'reactfire';\nimport 'firebase\/auth';<\/code><\/pre>\n<p>Zajmiemy <code>useState<\/code>si\u0119 kilkoma rzeczami, od sprawdzenia, czy u\u017cytkownik jest uwierzytelniony, po ustawienie b\u0142\u0119d\u00f3w. U\u017cyjemy <code>useFirebaseApp<\/code>haka, aby uzyska\u0107 dost\u0119p do po\u0142\u0105czenia Firebase. Jest to mo\u017cliwe tylko dlatego, \u017ce skonfigurowali\u015bmy dostawc\u0119 Firebase w poprzednim kroku i jest on dost\u0119pny tylko w hierarchii, w kt\u00f3rej zosta\u0142 dodany. Na koniec zaimportujemy <code>auth<\/code>bibliotek\u0119, aby m\u00f3c wywo\u0142ywa\u0107 metody Firebase do tworzenia u\u017cytkownik\u00f3w i logowania. Jest to wydajny spos\u00f3b, poniewa\u017c \u0142adujemy tylko t\u0119 bibliotek\u0119, a nie inne, takie jak <code>firestore<\/code>baza danych NoSQL czy <code>messaging<\/code>wiadomo\u015bci i powiadomienia.<\/p>\n<p>Nast\u0119pnie dodamy szybki zaczep do zarz\u0105dzania naszymi polami wej\u015bciowymi:<\/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>I wreszcie pe\u0142ny komponent, kt\u00f3ry podzielimy poni\u017cej, aby wskaza\u0107 najciekawsze fragmenty, te zwi\u0105zane z logowaniem i rejestracj\u0105 w 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>Najpierw \u0142\u0105czymy si\u0119 z instancj\u0105 Firebase:<\/p>\n<pre><code>const firebase = useFirebaseApp();<\/code><\/pre>\n<p>Jak wspomniano wcze\u015bniej, jest to mo\u017cliwe, poniewa\u017c wcze\u015bniej opakowali\u015bmy <code>App<\/code>komponent z dostawc\u0105 Firebase. Teraz, gdy jeste\u015bmy ju\u017c pod\u0142\u0105czeni do Firebase, mo\u017cemy skorzysta\u0107 z <code>auth<\/code>funkcji i wywo\u0142a\u0107 <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>Gdy si\u0119 powiedzie, ustawi zwr\u00f3cone dane, a pola formularza zostan\u0105 zast\u0105pione<\/p>\n<pre><code>Logged in as ${ auth?.user.email ?? '' }<\/code><\/pre>\n<p>Zwracane dane to du\u017cy obiekt o bardzo ciekawych w\u0142a\u015bciwo\u015bciach, wi\u0119c warto doda\u0107 <code>console.log()<\/code>do naszej <code>setReceivedData()<\/code>funkcji, aby zobaczy\u0107, co jeszcze zawiera.<\/p>\n<p>Proces tworzenia u\u017cytkownika jest podobny, z wyj\u0105tkiem tego, \u017ce u\u017cywamy funkcji <code>createUserWithEmailAndPassword()<\/code>.<\/p>\n<h2>Wniosek<\/h2>\n<p>Aby przetestowa\u0107 nasz login i rejestracj\u0119 Firebase, mo\u017cesz spr\u00f3bowa\u0107 zalogowa\u0107 si\u0119 dla nieistniej\u0105cego u\u017cytkownika, aby zobaczy\u0107 b\u0142\u0119dy. Nast\u0119pnie utw\u00f3rz u\u017cytkownika, a nast\u0119pnie zaloguj si\u0119 jako u\u017cytkownik.<\/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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Demo logowania i rejestracji Firebase.<br \/>\nCiekawostka: Chrome skar\u017cy si\u0119, \u017ce has\u0142o 123456, kt\u00f3rego u\u017cywam do testowania, zosta\u0142o z\u0142amane, co jest prawd\u0105.<\/p>\n<p>Je\u015bli teraz wr\u00f3cisz do aplikacji Firebase &gt; Uwierzytelnianie &gt; U\u017cytkownicy, zobaczysz nowego u\u017cytkownika (mo\u017ce by\u0107 konieczne u\u017cycie przycisku od\u015bwie\u017cania obok Dodaj u\u017cytkownika).<\/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=\"Jak utworzy\u0107 login Firebase i zarejestrowa\u0107 si\u0119 w React\" ><\/a><\/p>\n<p>Podsumowuj\u0105c, niezb\u0119dne kroki w celu zintegrowania Firebase z nasz\u0105 aplikacj\u0105 React to:<\/p>\n<ul>\n<li>skonfiguruj dostawc\u0119 Firebase i zapakuj komponent g\u0142\u00f3wny (lub katalog g\u0142\u00f3wny hierarchii, w kt\u00f3rym chcesz go u\u017cywa\u0107)<\/li>\n<li>Po\u0142\u0105cz si\u0119 z dostawc\u0105 Firebase za pomoc\u0105<code>useFirebaseApp<\/code><\/li>\n<li>korzystaj z funkcji uwierzytelniania!<\/li>\n<\/ul>\n<p>Sprawd\u017a repozytorium GitHub na <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>. Jedyn\u0105 r\u00f3\u017cnic\u0105 w tym przypadku jest to, \u017ce \u0142aduj\u0119 klucze do konfiguracji Firebase z pliku .env, aby unikn\u0105\u0107 ich publicznego ujawnienia.<\/p>\n<p>Je\u015bli masz jakie\u015b pytania, daj mi zna\u0107 w komentarzach poni\u017cej!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak utworzy\u0107 login i system rejestracji Firebase w React za pomoc\u0105 hook\u00f3w.<\/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":[721,897,784,752,836,845],"tags":[1169],"class_list":["post-231634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-oprogramowanie-open-source","category-otwarte-zrodlo","category-przewodnik-dla-poczatkujacych","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=231634"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/157702"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=231634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=231634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=231634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}