web-dev-qa-db-fra.com

Comment obtenir et définir des données sur Firebase avec Node.js?

J'apprends Firebase et Node.js. Je veux récupérer mes Tweets sur Twitter et les envoyer à Firebase. Je n'ai aucun problème pour obtenir un tweet de Twitter. Ma question est comment puis-je envoyer des données à Firebase?

J'ai essayé le code suivant:

var firebase = require('firebase');

// Initialize
var app = firebase.initializeApp({
    ServiceAccount: {
       projectId: "******",
       clientEmail: "****@gmail.com",
       privateKey: "-----BEGIN PRIVATE KEY-----\nkey\n-----END PRIVATE KEY-----\n"
    },
   databaseURL: "****.firebaseio.com"
}); 

// Set Sample Data
firebase.database().ref('/').set({
    username: "test",
    email: "[email protected]"
});

Et j'ai eu l'erreur suivante sur la console:

 Debugger listening on port 5858
 crypto.js:279
  var ret = this._handle.sign(toBuf(key), null, passphrase);
                         ^

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
    at Error (native)
    at Sign.sign (crypto.js:279:26)
    at Object.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\node_modules\jwa\index.js:54:45)
    at Object.jwsSign [as sign] (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\lib\sign-stream.js:23:24)
    at Object.JWT.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\index.js:137:16)
    at authJwt (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:83:16)
    at fetchAccessToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:96:17)
    at app_.INTERNAL.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:196:14)
    at Zb.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:28:3496)
    at yh (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:195:334)
 Press any key to continue...

En outre, this my firebase Règles: {"rules": {". Read": true, ". Write": true}}

16
Lujska

J'ai résolu mon problème. Je viens de télécharger le fichier json serviceAccount de la console Firebase et je l’ai inséré dans mon projet. Le fichier "Compte de service" contient tout ce dont vous avez besoin.

var firebase = require('firebase');

firebase.initializeApp({
    databaseURL: 'https://*****.firebaseio.com',
    credential: 'myapp-13ad200fc320.json', //this is file that I downloaded from Firebase Console
});

Ensuite, le code ci-dessous a bien fonctionné.

firebase.database().ref('/').set({
    username: "test",
    email: "[email protected]"
});
22
Lujska

Cette syntaxe/bibliothèque spécifique pour les comptes de service dans node apps est obsolète. La nouvelle méthode permettant d’atteindre Firebase sur un serveur (c’est-à-dire pas une application grand public, comme l’IoT ou un ordinateur de bureau) est le firebase admin sdk .

Votre code d'initialisation devrait maintenant aller:

var admin = require("firebase-admin");

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});

Vous pouvez toujours saisir manuellement vos informations d'identification, mais elles sont maintenant affectées à une propriété diff't:

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: "<PROJECT_ID>",
    clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
    privateKey: "-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n"
  }),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
15
Brandon

Nous avons rencontré le même problème avec AWS Beanstalk. La cause principale était parce que \n a été remplacé par \\n dans la variable de clé privée.

Après avoir ajouté l'expression rationnelle de remplacement, cela a été corrigé:

"private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')

L'impression des variables dans le journal peut également aider à isoler le problème.

10
riverfall