2016-05-22 2 views
11

私はFirebaseとNode.jsを学んでいます。 Twitterから自分のツイートを取得してFirebaseに送信したい。私はTwitterからツイートを得ることは問題ありません。 Firebaseにデータを送信するにはどうすればいいですか? Node.jsで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ルール:{ "ルール":{」を読んで":true、" write ":true}}

+0

それはそうです、というあなたの初期化コードは、今行く必要があります

秘密鍵に問題があります。あなたは 'privateKey.pem'のパスを引数として渡すことはできませんか? –

+0

クイックスタートhttps://github.com/firebase/quickstart-nodejs/tree/master/database – garrettmac

答えて

13

私は私の問題を解決しました。 Firebase ConsoleからserviceAccount jsonファイルをダウンロードしてプロジェクトに挿入しました。 「サービスアカウント」ファイルには、必要なものすべてが含まれています。

var firebase = require('firebase'); 

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

次に、以下のコードはうまく機能しました。

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

「serviceAccount」プロパティは推奨されていませんが、代わりに「資格情報」プロパティを使用する必要があります。 –

8

AWS Beanstalkで同じ問題が発生しました。根本的な原因は、\nがプライベートキー変数の\\nに置き換えられたためです。

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

ログに変数を印刷することも、問題を分離する助けることができる:それは固定された置き換える正規表現を追加した後

+0

は同じ問題に直面しています。あなたの答えは魅力のように働きます! – Pl4yeR

9

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

確認済みです。 https://firebase.google.com/docs/admin/setupから:以前のバージョンのNode.js SDKは、資格情報プロパティの代わりにserviceAccountプロパティを受け入れました。同様に、以前のバージョンのJava SDKには、setCredential()メソッドの代わりにsetServiceAccount()メソッドが含まれていました。これらはどちらも許可されていますが、廃止予定の警告が表示され、SDKの次のメジャーバージョンでは削除されます。 –

関連する問題