{"id":232282,"date":"2023-01-11T10:13:00","date_gmt":"2023-01-11T07:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232282"},"modified":"2022-11-10T08:27:49","modified_gmt":"2022-11-10T05:27:49","slug":"como-criar-um-login-do-firebase-e-se-inscrever-no-react","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-criar-um-login-do-firebase-e-se-inscrever-no-react\/","title":{"rendered":"Como criar um login do Firebase e se inscrever no React"},"content":{"rendered":"\n<p>O Firebase \u00e9 um sistema que oferece muitas plataformas para desenvolvedores criarem aplicativos da web. Um dos elementos essenciais em um aplicativo \u00e9 criar usu\u00e1rios e permitir que eles fa\u00e7am login. Vamos ver como podemos escrever um login do Firebase completo, mas muito simples de implementar.<\/p>\n<h2>Crie seu aplicativo Firebase<\/h2>\n<p>Primeiro voc\u00ea precisa criar um projeto de aplicativo do Firebase, ent\u00e3o v\u00e1 para o console do Firebase e adicione um novo projeto. Voc\u00ea adicionar\u00e1 o aplicativo aqui.<\/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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>Ele lan\u00e7ar\u00e1 um assistente que perguntar\u00e1 o nome do projeto.<\/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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>A pr\u00f3xima tela perguntar\u00e1 se voc\u00ea deseja ativar a an\u00e1lise. Desative-o e clique no bot\u00e3o <strong>Criar projeto<\/strong>. Levar\u00e1 um tempo para provisionar seu projeto e, depois disso, voc\u00ea receber\u00e1 um bot\u00e3o para <strong>Continuar<\/strong>, que o levar\u00e1 \u00e0 vis\u00e3o geral do projeto.<\/p>\n<p>Agora voc\u00ea precisa adicionar um aplicativo do Firebase ao projeto do Firebase. Faz sentido? Um projeto do Firebase permite que voc\u00ea contenha v\u00e1rios aplicativos do Firebase para iOS, Android, Web e Unity. Por enquanto, vamos criar um aplicativo da Web, pois usaremos o React para criar nosso login do 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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>Voc\u00ea ser\u00e1 solicitado a nomear este aplicativo e receber\u00e1 as chaves que precisar\u00e1 usar para se conectar ao Firebase. Eles ser\u00e3o algo como:<\/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>Usaremos essas chaves em nosso aplicativo <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> para configurar um provedor que nos permitir\u00e1 acessar o Firebase em qualquer componente do provedor.<\/p>\n<p>Por fim, v\u00e1 para <strong>Autentica\u00e7\u00e3o<\/strong> na barra lateral esquerda, na guia <strong>M\u00e9todo de login<\/strong> e ative a autentica\u00e7\u00e3o de e- <strong>mail\/senha .<\/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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>Voc\u00ea est\u00e1 pronto!<\/p>\n<h2>Instalar depend\u00eancias do Firebase<\/h2>\n<p>O Firebase est\u00e1 dispon\u00edvel para diferentes pilhas, incluindo <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>, que \u00e9 o que vamos usar agora. Vamos instalar apenas duas depend\u00eancias com 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>, que nos permitir\u00e1 acessar coisas como a <code>auth<\/code>biblioteca, que usaremos para realizar o login e tamb\u00e9m criar um novo usu\u00e1rio<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/reactfire\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>reactfire<\/code><\/a>, uma cole\u00e7\u00e3o de ferramentas \u00fateis para trabalhar com o Firebase no React. Usaremos seu <code>useFirebaseApp<\/code>para se conectar ao contexto e acessar o Firebase<\/li>\n<\/ul>\n<p>Vamos instal\u00e1-los com<\/p>\n<pre><code>npm i firebase reactfire<\/code><\/pre>\n<p>A estrutura do app <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> ser\u00e1 bem simples, como segue:<\/p>\n<pre><code>|-- index.js\n|-- App.js\n|-- FirebaseUser\n    |-- index.js<\/code><\/pre>\n<p>e eles ser\u00e3o relacionados da seguinte forma:<\/p>\n<pre><code>index.js --import--&gt; .\/App.js --import--&gt; .\/FirebaseUser<\/code><\/pre>\n<h2>Configurar o provedor Firebase<\/h2>\n<p>Vamos escrever o primeiro arquivo para login e inscri\u00e7\u00e3o do Firebase! Na verdade, n\u00e3o precisamos escrev\u00ea-lo, pois isso deve ser adicionado ao arquivo em que voc\u00ea est\u00e1 emitindo <code>ReactDOM.render()<\/code>, no nosso caso ser\u00e1 <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>Isso importa <code>FirebaseAppProvider<\/code>e adiciona as chaves de configura\u00e7\u00e3o que voc\u00ea passar\u00e1 para ele. Agora voc\u00ea pode encapsular o componente raiz, que no nosso caso est\u00e1 <code>App<\/code>com o provedor:<\/p>\n<pre><code>ReactDOM.render(, document.getElementById('root')\n);<\/code><\/pre>\n<p>Excelente! Agora todos os componentes abaixo poder\u00e3o acessar o Firebase!<\/p>\n<h2>Use o componente de login e inscri\u00e7\u00e3o do Firebase<\/h2>\n<p>Vamos escrever agora o <code>App<\/code>componente onde vamos importar e usar o <code>FirebaseUser<\/code>componente para criar e logar um usu\u00e1rio. N\u00e3o h\u00e1 nada realmente relacionado ao <a href=\"https:\/\/startfunction.com\/tag\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase<\/a> aqui. Vamos implementar um login e uma inscri\u00e7\u00e3o usando o mesmo componente para que voc\u00ea possa ver como podemos reutilizar o c\u00f3digo, ent\u00e3o neste componente implementaremos um par de bot\u00f5es que, quando clicados, renderizar\u00e3o o <code>FirebaseUser<\/code>modo de login ou modo de inscri\u00e7\u00e3o:<\/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>Configure o login do Firebase e inscreva-se<\/h2>\n<p>Vamos criar um componente para isso. Primeiro precisamos importar alguns m\u00f3dulos:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport { useFirebaseApp } from 'reactfire';\nimport 'firebase\/auth';<\/code><\/pre>\n<p>Vamos <code>useState<\/code>por algumas coisas, desde saber se o usu\u00e1rio est\u00e1 autenticado at\u00e9 definir erros. Vamos usar o <code>useFirebaseApp<\/code>gancho para acessar a conex\u00e3o do Firebase. Isso s\u00f3 \u00e9 poss\u00edvel porque configuramos o provedor Firebase na etapa anterior e ele s\u00f3 est\u00e1 dispon\u00edvel na hierarquia em que foi adicionado. Por fim, importaremos a <code>auth<\/code>biblioteca para que possamos chamar os m\u00e9todos do Firebase para criar usu\u00e1rios e fazer login. Esta \u00e9 uma maneira eficiente porque estamos carregando apenas esta biblioteca, e n\u00e3o outras como <code>firestore<\/code>para o banco de dados NoSQL ou <code>messaging<\/code>para mensagens e notifica\u00e7\u00f5es.<\/p>\n<p>Em seguida, adicionaremos um gancho r\u00e1pido para gerenciar nossos campos de entrada:<\/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 finalmente o componente completo, que vamos detalhar abaixo para apontar as partes mais interessantes, aquelas relacionadas ao login e inscri\u00e7\u00e3o do 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>Primeiro, conectamos \u00e0 inst\u00e2ncia do Firebase:<\/p>\n<pre><code>const firebase = useFirebaseApp();<\/code><\/pre>\n<p>Como apontado anteriormente, isso \u00e9 poss\u00edvel porque anteriormente agrupamos o <code>App<\/code>componente com o provedor Firebase. Agora que estamos conectados ao Firebase, podemos usar a <code>auth<\/code>funcionalidade e chamar <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 for bem-sucedido, ele definir\u00e1 os dados retornados e os campos do formul\u00e1rio ser\u00e3o substitu\u00eddos por<\/p>\n<pre><code>Logged in as ${ auth?.user.email ?? '' }<\/code><\/pre>\n<p>Os dados retornados s\u00e3o um objeto grande com propriedades muito interessantes, ent\u00e3o vale a pena adicionar um <code>console.log()<\/code>\u00e0 nossa <code>setReceivedData()<\/code>fun\u00e7\u00e3o para ver o que mais ele inclui.<\/p>\n<p>O processo para criar um usu\u00e1rio \u00e9 semelhante, exceto que usamos a fun\u00e7\u00e3o <code>createUserWithEmailAndPassword()<\/code>.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Para testar nosso login do Firebase e se inscrever, voc\u00ea pode tentar fazer login para um usu\u00e1rio que n\u00e3o existe para ver os erros. Depois disso, crie um usu\u00e1rio e fa\u00e7a login como o usu\u00e1rio.<\/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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>Demonstra\u00e7\u00e3o do login e inscri\u00e7\u00e3o do Firebase.<br \/>\nCuriosidade: o Chrome reclama que a senha 123456 que estou usando para teste est\u00e1 comprometida, o que \u00e9 verdade.<\/p>\n<p>Se agora voc\u00ea voltar para o aplicativo Firebase &gt; Autentica\u00e7\u00e3o &gt; Usu\u00e1rios, ver\u00e1 o novo usu\u00e1rio (talvez seja necess\u00e1rio usar o bot\u00e3o de atualiza\u00e7\u00e3o ao lado de Adicionar usu\u00e1rio).<\/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=\"Como criar um login do Firebase e se inscrever no React\" ><\/a><\/p>\n<p>Para recapitular, as etapas essenciais para integrar o Firebase em nosso aplicativo React s\u00e3o:<\/p>\n<ul>\n<li>configure o provedor Firebase e envolva o componente raiz (ou a raiz da hierarquia em que voc\u00ea deseja us\u00e1-lo)<\/li>\n<li>hook para o provedor Firebase usando<code>useFirebaseApp<\/code><\/li>\n<li>use as fun\u00e7\u00f5es de autentica\u00e7\u00e3o!<\/li>\n<\/ul>\n<p>Verifique o reposit\u00f3rio do GitHub em <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>. A \u00fanica diferen\u00e7a com este \u00e9 que estou carregando as chaves para configurar o Firebase a partir de um arquivo .env para evitar exp\u00f4-los publicamente.<\/p>\n<p>Se voc\u00ea tiver alguma d\u00favida, deixe-me saber nos coment\u00e1rios abaixo!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Saiba como criar um sistema de login e inscri\u00e7\u00e3o do Firebase no React usando ganchos.<\/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":[898,753,722,837,785,846],"tags":[1170],"class_list":["post-232282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-guia-para-iniciantes","category-software-livre","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/232282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=232282"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/232282\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/157702"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=232282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=232282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=232282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}