Использование транзакций в Firebase - отличный способ для атомарного изменения данных, но как узнать, что пользователь действительно использует мой код для вставки данных?Безопасность Firebase - Сделки
Например, что делать, если пользователь получает ссылку на местоположение данных (используя консоль браузера) и перезаписывает предыдущие данные с использованием set
вместо того, чтобы нажимать на мою предварительно запрограммированную кнопку, которая использует в фоновом режиме transaction
?
Update (пример):
var wilmaRef = new Firebase('https://docs-examples.firebaseio.com/samplechat/users/wilma');
wilmaRef.transaction(function(currentData) {
if (currentData === null) {
return { name: { first: 'Wilma', last: 'Flintstone' } };
} else {
console.log('User wilma already exists.');
return; // Abort the transaction.
}
});
Теперь, если пользователь использует:
wilmaRef.set({name: { first: 'Wilma', last: 'Flintstone' }});
Ответ высокого уровня ниже. Но, как и предыдущий, этот вопрос не очень хорошо вписывается в формат переполнения стека. Добавьте конкретные структуры данных и пример кода, чтобы они соответствовали друг другу. –
@FrankvanPuffelen Обновлен вопрос на примере –
Это еще проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Обе операции имеют одинаковый результат. Какое злоупотребление вы пытаетесь предотвратить? Например: «Я хочу разрешить пользователю указывать только одно имя, после чего они не могут изменить его». Если вы потратите некоторое время на [Руководство по безопасности и правилам Firebase] (https://www.firebase.com/docs/security/guide/index.html), вы найдете примеры, которые реализуют это. –