{"id":232192,"date":"2023-01-11T10:02:00","date_gmt":"2023-01-11T07:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232192"},"modified":"2022-11-10T08:01:01","modified_gmt":"2022-11-10T05:01:01","slug":"comment-creer-une-connexion-firebase-et-sinscrire-dans-react","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-creer-une-connexion-firebase-et-sinscrire-dans-react\/","title":{"rendered":"Comment cr\u00e9er une connexion Firebase et s&rsquo;inscrire dans React"},"content":{"rendered":"\n<p>Firebase est un syst\u00e8me qui offre de nombreuses plates-formes aux d\u00e9veloppeurs pour cr\u00e9er des applications Web. L&rsquo;un des \u00e9l\u00e9ments essentiels d&rsquo;une application est de cr\u00e9er des utilisateurs et de leur permettre de se connecter. Voyons comment nous pouvons \u00e9crire une connexion Firebase compl\u00e8te mais tr\u00e8s simple \u00e0 mettre en \u0153uvre.<\/p>\n<h2>Cr\u00e9ez votre application Firebase<\/h2>\n<p>Vous devez d&rsquo;abord cr\u00e9er un projet d&rsquo;application Firebase, alors rendez-vous sur la console Firebase et ajoutez un nouveau projet. Vous allez ajouter l&rsquo;application ici.<\/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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>Il lancera un assistant qui vous demandera le nom du projet.<\/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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>L&rsquo;\u00e9cran suivant vous demandera si vous souhaitez activer l&rsquo;analyse. D\u00e9sactivez-le et cliquez sur le bouton <strong>Cr\u00e9er un projet<\/strong>. Il faudra un certain temps pour provisionner votre projet et apr\u00e8s cela, vous obtiendrez un bouton pour <strong>continuer<\/strong> qui vous am\u00e8nera \u00e0 la vue d&rsquo;ensemble du projet.<\/p>\n<p>Vous devez maintenant ajouter une application Firebase au projet Firebase. Logique? Un projet Firebase vous permet de contenir plusieurs applications Firebase pour iOS, Android, Web et Unity. Pour l&rsquo;instant, cr\u00e9ons une application Web puisque nous utiliserons React pour cr\u00e9er notre connexion 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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>Il vous sera demand\u00e9 de nommer cette application et vous recevrez les cl\u00e9s dont vous aurez besoin pour vous connecter \u00e0 Firebase. Ils ressembleront \u00e0 quelque chose comme\u00a0:<\/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>Nous utiliserons ces cl\u00e9s dans notre application <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> pour configurer un fournisseur qui nous permettra d&rsquo;acc\u00e9der \u00e0 Firebase dans n&rsquo;importe quel composant sous le fournisseur.<\/p>\n<p>Enfin, allez dans <strong>Authentification<\/strong> dans la barre lat\u00e9rale gauche, l&rsquo; onglet <strong>M\u00e9thode de<\/strong> connexion et activez l&rsquo; authentification <strong>par e-mail\/mot de passe.<\/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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>Vous \u00eates pr\u00eat\u00a0!<\/p>\n<h2>Installer les d\u00e9pendances Firebase<\/h2>\n<p>Firebase est disponible pour diff\u00e9rentes piles, y compris <a href=\"https:\/\/startfunction.com\/category\/javascript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JavaScript<\/a> et <a href=\"https:\/\/startfunction.com\/tag\/node-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js<\/a>, que nous allons utiliser maintenant. Nous allons installer seulement deux d\u00e9pendances avec 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>, cela nous permettra d&rsquo;acc\u00e9der \u00e0 des choses comme la <code>auth<\/code>biblioth\u00e8que, que nous utiliserons pour effectuer la connexion et aussi cr\u00e9er un nouvel utilisateur<\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/reactfire\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>reactfire<\/code><\/a>, une collection d&rsquo;outils utiles pour travailler avec Firebase dans React. Nous les utiliserons <code>useFirebaseApp<\/code>pour nous connecter au contexte et acc\u00e9der \u00e0 Firebase<\/li>\n<\/ul>\n<p>Installons-les avec<\/p>\n<pre><code>npm i firebase reactfire<\/code><\/pre>\n<p>La structure de l&rsquo; application <a href=\"https:\/\/startfunction.com\/tag\/react\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> sera tr\u00e8s simple, comme suit\u00a0:<\/p>\n<pre><code>|-- index.js\n|-- App.js\n|-- FirebaseUser\n    |-- index.js<\/code><\/pre>\n<p>et ils seront li\u00e9s comme suit\u00a0:<\/p>\n<pre><code>index.js --import--&gt; .\/App.js --import--&gt; .\/FirebaseUser<\/code><\/pre>\n<h2>Configurer le fournisseur Firebase<\/h2>\n<p>\u00c9crivons le premier fichier pour la connexion et l&rsquo;inscription \u00e0 Firebase\u00a0! Nous n&rsquo;avons pas vraiment besoin de l&rsquo;\u00e9crire, car cela devrait \u00eatre ajout\u00e9 au fichier o\u00f9 vous \u00e9mettez <code>ReactDOM.render()<\/code>, dans notre cas ce sera <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>Cela importe le <code>FirebaseAppProvider<\/code>et ajoute les cl\u00e9s de configuration que vous lui passerez. Vous pouvez maintenant encapsuler le composant racine, qui dans notre cas est <code>App<\/code>avec le fournisseur\u00a0:<\/p>\n<pre><code>ReactDOM.render(, document.getElementById('root')\n);<\/code><\/pre>\n<p>Super! D\u00e9sormais, tous les composants ci-dessous pourront acc\u00e9der \u00e0 Firebase\u00a0!<\/p>\n<h2>Utiliser le composant de connexion et d&rsquo;inscription Firebase<\/h2>\n<p>\u00c9crivons maintenant le <code>App<\/code>composant o\u00f9 nous allons importer et utiliser le <code>FirebaseUser<\/code>composant pour cr\u00e9er et connecter un utilisateur. Il n&rsquo;y a rien de vraiment li\u00e9 \u00e0 <a href=\"https:\/\/startfunction.com\/tag\/firebase\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Firebase<\/a> ici. Nous allons impl\u00e9menter une connexion et une inscription en utilisant le m\u00eame composant afin que vous puissiez voir comment nous pouvons r\u00e9utiliser le code, donc dans ce composant, nous allons impl\u00e9menter une paire de boutons qui, une fois cliqu\u00e9s, rendront le <code>FirebaseUser<\/code>en mode connexion ou un mode d&rsquo;inscription\u00a0:<\/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>Configurez la connexion Firebase et inscrivez-vous<\/h2>\n<p>Nous allons cr\u00e9er un composant pour cela. Nous devons d&rsquo;abord importer certains modules\u00a0:<\/p>\n<pre><code>import React, { useState } from 'react';\nimport { useFirebaseApp } from 'reactfire';\nimport 'firebase\/auth';<\/code><\/pre>\n<p>Nous allons <code>useState<\/code>pour quelques choses, de savoir si l&rsquo;utilisateur est authentifi\u00e9 pour d\u00e9finir des erreurs. Nous allons utiliser le <code>useFirebaseApp<\/code>crochet pour acc\u00e9der \u00e0 la connexion Firebase. Cela n&rsquo;est possible que parce que nous avons configur\u00e9 le fournisseur Firebase \u00e0 l&rsquo;\u00e9tape pr\u00e9c\u00e9dente, et il n&rsquo;est disponible que sous la hi\u00e9rarchie o\u00f9 il a \u00e9t\u00e9 ajout\u00e9. Enfin, nous importerons la <code>auth<\/code>biblioth\u00e8que afin de pouvoir appeler les m\u00e9thodes Firebase pour cr\u00e9er des utilisateurs et se connecter. C&rsquo;est un moyen efficace car nous ne chargeons que cette biblioth\u00e8que, et pas d&rsquo;autres comme <code>firestore<\/code>pour la base de donn\u00e9es NoSQL, ou <code>messaging<\/code>pour les messages et les notifications.<\/p>\n<p>Ensuite, nous allons ajouter un crochet rapide pour g\u00e9rer nos champs de saisie\u00a0:<\/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>Et enfin le composant complet, que nous d\u00e9taillerons ci-dessous pour indiquer les parties les plus int\u00e9ressantes, celles li\u00e9es \u00e0 la connexion et \u00e0 l&rsquo;inscription \u00e0 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>Tout d&rsquo;abord, nous nous connectons \u00e0 l&rsquo;instance Firebase\u00a0:<\/p>\n<pre><code>const firebase = useFirebaseApp();<\/code><\/pre>\n<p>Comme indiqu\u00e9 pr\u00e9c\u00e9demment, cela est possible car nous avons pr\u00e9c\u00e9demment envelopp\u00e9 le <code>App<\/code>composant avec le fournisseur Firebase. Maintenant que nous sommes accroch\u00e9s \u00e0 Firebase, nous pouvons utiliser la <code>auth<\/code>fonctionnalit\u00e9 et appeler <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>Quand il r\u00e9ussit, il d\u00e9finira les donn\u00e9es renvoy\u00e9es et les champs du formulaire seront remplac\u00e9s par<\/p>\n<pre><code>Logged in as ${ auth?.user.email ?? '' }<\/code><\/pre>\n<p>Les donn\u00e9es renvoy\u00e9es sont un objet volumineux avec des propri\u00e9t\u00e9s tr\u00e8s int\u00e9ressantes, il vaut donc la peine d&rsquo;ajouter a <code>console.log()<\/code>\u00e0 notre <code>setReceivedData()<\/code>fonction pour voir ce qu&rsquo;elle inclut d&rsquo;autre.<\/p>\n<p>Le processus de cr\u00e9ation d&rsquo;un utilisateur est similaire, sauf que nous utilisons la fonction <code>createUserWithEmailAndPassword()<\/code>.<\/p>\n<h2>Conclusion<\/h2>\n<p>Pour tester notre connexion Firebase et vous inscrire, vous pouvez essayer de vous connecter pour un utilisateur qui n&rsquo;existe pas afin de voir les erreurs. Apr\u00e8s cela, cr\u00e9ez un utilisateur, puis connectez-vous en tant qu&rsquo;utilisateur.<\/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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>D\u00e9mo de connexion \u00e0 Firebase et inscription.<br \/>\nFait amusant: Chrome se plaint que le mot de passe 123456 que j&rsquo;utilise pour les tests est compromis, ce qui est vrai.<\/p>\n<p>Si vous revenez maintenant \u00e0 l&rsquo;application Firebase &gt; Authentification &gt; Utilisateurs, vous verrez le nouvel utilisateur (vous devrez peut-\u00eatre utiliser le bouton d&rsquo;actualisation \u00e0 c\u00f4t\u00e9 de Ajouter un utilisateur).<\/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=\"Comment cr\u00e9er une connexion Firebase et s&#039;inscrire dans React\" ><\/a><\/p>\n<p>Pour r\u00e9capituler, les \u00e9tapes essentielles pour int\u00e9grer Firebase dans notre application React sont\u00a0:<\/p>\n<ul>\n<li>configurez le fournisseur Firebase et encapsulez le composant racine (ou la racine de la hi\u00e9rarchie o\u00f9 vous souhaitez l&rsquo;utiliser)<\/li>\n<li>se connecter au fournisseur Firebase en utilisant<code>useFirebaseApp<\/code><\/li>\n<li>utilisez les fonctions d&rsquo;authentification\u00a0!<\/li>\n<\/ul>\n<p>Consultez le r\u00e9f\u00e9rentiel GitHub \u00e0 l&rsquo; <a href=\"https:\/\/github.com\/eliorivero\/firebase-login-sign-up\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">adresse https:\/\/github.com\/eliorivero\/firebase-login-sign-up<\/a>. La seule diff\u00e9rence avec celui-ci est que je charge les cl\u00e9s pour configurer Firebase \u00e0 partir d&rsquo;un fichier .env pour \u00e9viter de les exposer publiquement.<\/p>\n<p>Si vous avez des questions, faites-le moi savoir dans les commentaires ci-dessous!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apprenez \u00e0 cr\u00e9er un syst\u00e8me de connexion et d&rsquo;inscription Firebase dans React \u00e0 l&rsquo;aide de crochets.<\/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":[893,717,832,780,748,841],"tags":[1167],"class_list":["post-232192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-logiciels-open-source","category-open-source-projektmanagement-2","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=232192"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232192\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/157702"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=232192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=232192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=232192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}