Подтвердить что ты не робот

Как получить и установить данные в Firebase с помощью Node.js?

Я изучаю Firebase и Node.js. Я хочу получить твиты из Twitter и отправить их в Firebase. У меня нет проблем, чтобы получить твит из Twitter. Мой вопрос: как я могу отправить данные в Firebase?

Я попробовал следующий код:

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]"
});

И я получил следующую ошибку на консоли:

 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...

Кроме того, это мои правила firebase: { "rules": { ". read": true, ". write": true}}

4b9b3361

Ответ 1

Я решил свою проблему. Я только что скачал файл jA serviceAccount из Firebase Console и вставил его в свой проект. Файл "Сервисная учетная запись" содержит все, что вам нужно.

var firebase = require('firebase');

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

Тогда код ниже работал хорошо.

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

Ответ 2

Этот специальный синтаксис/библиотека для учетных записей служб в приложениях node устарел. Новый метод достижения firebase на сервере (то есть не потребительское приложение, например IoT или рабочий стол) - это firebase admin sdk.

Теперь вы должны ввести код инициализации:

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"
});

Вы все еще можете вручную вводить свои учетные данные, но теперь они назначены свойству diff't:

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

Ответ 3

Мы столкнулись с той же проблемой с AWS Beanstalk. Основная причина заключалась в том, что \n был заменен на \\n в переменной закрытого ключа.

После добавления замены regexp он был исправлен:

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

Печать переменных в журнале также может помочь выделить проблему.