ここでの問題は、クライアントがFirebaseに対して認証されているNodeJSサーバに安全に伝える必要があることです。これについてはいくつかの方法がありますが、最も簡単なのはおそらくすべてのクライアントがFireFox自体を経由してNodeJS通信を行うことです。
クライアントがNodeJSサーバによって提供されるRESTエンドポイントにヒットするのではなく、クライアントがNodeJSサーバが監視しているFirebaseの場所に書き込ませます。次に、Firebaseセキュリティルールを使用して、クライアントによって書き込まれたデータを検証し、サーバがそれを信頼できるようにすることができます。
例えば、ユーザーがあなたのアプリを使って任意の電子メールを送信できるようにしたい場合(実際に電子メールを送信するNodeJSサーバーで)、次のようなルールを持つ/ emails_to_sendの場所を持つことができます:
あなたが行うことができ、クライアントで次に
{
"rules": {
"emails_to_send": {
"$id": {
".write": "!data.exists() && newData.child('from').val() == auth.email",
".validate": "newData.hasChildren(['from', 'to', 'subject', 'body'])"
}
}
}
}
:
ref.child('emails_to_send').push({
from: '[email protected]',
to: '[email protected]',
subject: 'hi',
body: 'Hey, how\'s it going?'
});
そして、あなたのNodeJSコードで、あなたのFirebase秘密で)(.authを呼び出す(あなたが読んで、すべてを書くことができます)、次に行うことができます:
ref.child('emails_to_send').on('child_added', function(emailSnap) {
var email = emailSnap.val();
sendEmailHelper(email.from, email.to, email.subject, email.body);
// Remove it now that we've processed it.
emailSnap.ref().remove();
});
これは、最も簡単で最も正しい解決策になるでしょう。たとえば、ユーザがFirebase経由でログアウトすると、Firebaseに書き込むことができなくなり、NodeJSサーバに電子メールを送信させることができなくなります。また、サーバーが一時的にダウンしている場合は、バックアップを開始すると、電子メールを送信して「追いつく」ことになり、すべてが引き続き機能します。
すばらしいアドバイスありがとうございます。 firebaseのドキュメントをこのようなアーキテクチャのアドバイスを含むように拡張することもできます。 – markbarton
良い点。私たちができることがわかります。 :-) –
このようにして、電子メール送信時のエラー処理もFirebaseを通じて行う必要があります。FYI – tomericco