Ответ 1
По существу, проблема здесь заключается в том, что вам необходимо безопасно передать серверу NodeJS, которому клиент аутентифицирован как Firebase. Есть несколько способов, которыми вы могли бы это сделать, но самым легким, возможно, является то, что все ваши клиентские и коммуникационные связи проходят через Firebase.
Поэтому вместо того, чтобы клиент попал в конечную точку REST, обслуживаемую вашим сервером NodeJS, попросите клиента записать в местоположение Firebase, которое контролирует ваш NodeJS-сервер. Затем вы можете использовать правила безопасности 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\ it going?'
});
И в коде NodeJS вы можете вызвать .auth() с вашей Firebase Secret (чтобы вы могли читать и писать все), а затем выполните:
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-серверы по электронной почте, что, скорее всего, будет поведением, которое вы хотите. Это также означает, что если ваш сервер временно не работает, когда вы начнете его резервное копирование, он "догонит" отправку писем, и все будет продолжать работать.