100 votes

firebase.auth n'est pas une fonction

J'utilise Webpack avec firebase et firebase-admin.

Pour installer firebase, j'ai exécuté

npm install --save firebase

Je suis en train d'importer firebase en utilisant,

import * as firebase from 'firebase/app'
import 'firebase/auth'

J'ai aussi essayé

import * as firebase from 'firebase'

Et j'ai essayé

const firebase = require('firebase')

Comme suggéré dans Guide de démarrage en ligne

Lorsque j'essaie d'utiliser firebase.auth() Cependant, je reçois une erreur

console.js:32 TypeError : firebase.auth n'est pas une fonction

Lorsque j'utilise le débogueur pour inspecter firebase Je vois qu'en fait il n'a pas de auth fonction :

> firebase
 {__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}

Comment puis-je obtenir auth() inclus comme une fonction en utilisant webpack ?

Merci.

7 votes

Ma question ne fait pas double emploi. Cette question fait référence à une méthode spécifique du service d'authentification et n'a rien à voir avec webpack. Veuillez lire les questions avant de les considérer comme des doublons.

1 votes

Êtes-vous sûr d'avoir la dernière version de Firebase installée ? Ils font des mises à jour quotidiennement, donc je vérifie toujours que ma version est la dernière disponible. Communiqués de presse de Firebase

0 votes

Pouvez-vous confirmer que vous avez initialisé avec succès l'application Firebase ? Les autres éléments fonctionnent-ils, comme la base de données ?

91voto

Eric Conner Points 1984

Ok, j'ai réparé ça en supprimant mon node_modules et de tout réinstaller.

J'importe aussi Firebase comme ça :

import firebase from 'firebase'
require('firebase/auth')

Je ne sais pas.

¯\_()_/¯

0 votes

J'ai fait la même chose dans le passé.

3 votes

Cela fonctionne pour moi aussi, mais je n'ai pas eu besoin de réinstaller node_modules. Merci.

4 votes

Cela n'a pas fonctionné pour moi et semble être un problème qui se produit lorsque vous avez à la fois firebase et firebase-admin installés dans le même paquet. La mise à niveau vers firebase@v4.7.0 a fonctionné pour moi, le problème apparaissant à firebase@v4.8.0. Le problème est discuté sur le repo de firebase ici]( github.com/firebase/firebase-js-sdk/issues/752 ).

47voto

Joao Lopes Points 580

Je sais que vous avez résolu votre problème mais il n'y a pas de véritable réponse au problème original. Le problème n'était pas avec le node_modules c'était avec la façon dont vous avez importé le composant.

Lorsque vous exportez un composant de la manière ES6, vous le faites normalement export default () => { console.log('default component export'); };

default est le mot clé ici, lorsque vous importez un composant à la manière ES6 comme import firebase from 'firebase' c'est saisir le default de l'objet exporté.

En gardant à l'esprit l'exemple ci-dessus, voici ce que vous avez fait de mal.

Utilisation de l'ES6 :

import * as firebase from 'firebase'

console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function

Utilisation de l'ES5 :

var firebase = require('firebase')

console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function

Notez le .default

J'espère que cela aidera à expliquer ce qui n'allait pas en premier lieu.

2 votes

L'avez-vous testé ? Lorsque je l'exécute, j'obtiens des entrées valides pour auth et default.auth. Ma console : snag.gy/fWIUCs.jpg et mon code : snag.gy/hyAoum.jpg

0 votes

Ça n'a pas marché quand j'ai essayé. J'ai essayé sur le nœud, mais pas sur le navigateur.

0 votes

Je vois. J'ai essayé dans le navigateur. Je pensais que le problème pouvait être lié à webpack, c'est pourquoi j'ai utilisé le navigateur.

19voto

Lance Samaria Points 1995

Je continue à avoir une erreur qui dit

"TypeError : firebase.auth n'est pas une fonction"

J'ai réussi à faire apparaître l'objet auth et la chose que j'ai faite différemment est d'installer les modules dans un ordre différent.

La première fois que j'ai installé les modules (c'est quand l'objet auth n'apparaissait pas) :

// this seems to confuse things with the auth object when installed in this order
$ npm install firebase-admin --save
$ npm install firebase --save

J'ai supprimé le dossier npm et j'ai recommencé à zéro, mais cette fois, j'ai inversé l'ordre d'installation :

// for some reason this worked and now I can access the auth object
$ npm install firebase --save
$ npm install firebase-admin --save

Je n'ai rien fait d'autre. J'ai simplement inversé l'ordre d'installation en installant firebase en premier et firebase-admin en second.

J'espère que cela fonctionnera pour d'autres personnes.

Vous pouvez en savoir plus à ce sujet ici

1 votes

Je sais que c'est très étrange. J'ai eu mal à la tête avec ça pendant des mois, j'ai fait un tas de recherches, rien n'a marché. J'ai juste décidé par hasard d'essayer et ça a marché. C'était littéralement un coup de chance.

0 votes

Ça a marché pour moi, merci ! Les détails ici : github.com/firebase/firebase-js-sdk/issues/

0 votes

Notez que firebase-admin (qui est juste un client firebase avec des privilèges d'administrateur) n'est pas destiné à être utilisé dans des applications frontales comme reactJS ou VueJS mais seulement dans un environnement serveur sécurisé comme indiqué dans la documentation. firebase.google.com/docs/auth/admin/manage-users#create_a_user sinon ce serait une grosse faille de sécurité. Une solution consisterait à utiliser une fonction dans le nuage et à la déclencher par une action que le client non administrateur pourrait effectuer.

14voto

Il suffit d'ajouter >

import firebase from '@firebase/app';
require('firebase/auth');

dans votre projet

2 votes

Pourquoi exiger et non imp imp imp imp ler ?

3 votes

Vous pouvez également utiliser une déclaration d'importation ; ``` import Firebase from 'firebase/app' ; import 'firebase/auth' ; ```

9voto

Gayan Pathirage Points 16

Bien qu'il existe de nombreuses causes profondes à l'origine de ce problème, une simple cause comme celle-ci pourrait également être en cause.

J'ai oublié d'inclure les fichiers js pour auth et db bien que je les utilise dans le code JS.

Avant la réparation ;

<!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-app.js"></script>

Après la réparation ;

<!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-app.js"></script>

<!-- Add Firebase products that you want to use -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-auth.js"></script>

<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-database.js"></script>

0 votes

C'est la bonne réponse. Si "firebase-app.js" doit être le premier à être inclus, les autres SDK (pour l'authentification, la base de données, etc.) doivent être ajoutés séparément. Lorsque vous utilisez ceci dans ES6, le SDK spécifique doit être soit importé, soit requis séparément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X