Im Wesentlichen das Problem hier ist, müssen Sie sicher zu Ihrem NodeJS-Server übermitteln, der der Client als Firebase authentifiziert ist. Es gibt mehrere Möglichkeiten, wie Sie das erreichen könnten, aber am einfachsten ist es wahrscheinlich, wenn Ihre gesamte Client-< -> NodeJS-Kommunikation Firebase selbst durchläuft.
Anstatt den REST-Endpunkt von Ihrem NodeJS-Server bedienen zu lassen, muss der Client also an einen Firebase-Standort schreiben, den Ihr NodeJS-Server überwacht. Dann können Sie Firebase-Sicherheitsregeln verwenden, um die vom Client geschriebenen Daten zu überprüfen, und Ihr Server kann ihnen vertrauen.
Wenn Sie beispielsweise möchten, dass Benutzer beliebige E-Mails über Ihre App senden können (wobei Ihr NodeJS-Server sich um das Senden der E-Mails kümmert), könnten Sie einen/emails_to_send-Speicherort mit folgenden Regeln haben:
{
"rules": {
"emails_to_send": {
"$id": {
".write": "!data.exists() && newData.child('from').val() == auth.email",
".validate": "newData.hasChildren(['from', 'to', 'subject', 'body'])"
}
}
}
}
dann im Client können Sie tun:
ref.child('emails_to_send').push({
from: '[email protected]',
to: '[email protected]',
subject: 'hi',
body: 'Hey, how\'s it going?'
});
und in Ihrem NodeJS Code, den Sie anrufen .auth könnten() mit Ihrem Firebase Geheimnis (so kann man alles lesen und schreiben) und dann tun:
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();
});
Dies wird sowohl die einfachste als auch die korrekteste Lösung sein. Wenn sich der Benutzer beispielsweise über Firebase abmeldet, kann er nicht mehr in Firebase schreiben, sodass er Ihren NodeJS-Server nicht mehr in die Lage versetzen kann, E-Mails zu senden. Dies ist wahrscheinlich das gewünschte Verhalten. Es bedeutet auch, wenn Ihr Server vorübergehend nicht erreichbar ist, wenn Sie ihn wieder starten, wird er die E-Mails "nachholen" und alles wird weiter funktionieren.
Das ist ein toller Rat - danke. Vielleicht könnte die Firebase-Dokumentation um diese Architekturberatung erweitert werden. – markbarton
Guter Punkt. Ich werde sehen, was wir tun können. :-) –
Auf diese Weise sollte die Fehlerbehandlung beim E-Mail-Versand auch über Firebase erfolgen ... FYI – tomericco