0

Я пытался отлаживать часами проблему правил Firebase и задавался вопросом, есть ли что-то более доступное.

Моя проблема в том, что я сохраняю firebaseObject с $save (или создаю с $add) и получаю разрешение, запрещенное из-за моих правил. Тем не менее, как правила, так и объект довольно сложны, и существуют десятки правил, которые задействованы. В моем симуляторе, я думаю, что я получил все, но все же получить разрешение отказано.

Проблема в том, что я не уверен на 100%, как данные JSON действительно выглядят, какие $save пытается отправить в Firebase. Если я использую обычный console.log(myObject), я получаю, конечно, список всех значений и функций внутри этого объекта, но это не то же самое, что и ожидаемый необработанный JSON (например, { "name": "value" }).

Есть ли какой-либо способ отображения фактических данных JSON в реальном времени? $save отправляет для копирования в симулятор правил и отладки? Или есть ли другой способ узнать, какое точное разрешение отклонено?

В противном случае, я должен идти один за другим, отключая свои разрешения и на котором будет довольно длинная ночь для меня. :(

ответ

0

Если значение $firebaseObject является объектом, единственное отличие (помимо прототипа проводных методов) должен быть несколько $ -prefixed свойств (как $id и $resolved). Таким образом, вы должны быть в состоянии чтобы увидеть фактический JSON, что будет записано в базу данных, используя что-то вроде этого:.

var written = {}; 
Object.keys(myObject).forEach(function (key) { 
    if (key.charAt(0) !== "$") { written[key] = myObject[key]; } 
}); 
console.log(JSON.stringify(written)); 

в $$hashKey записи, указанные в вашем комментарии добавляют AngularJS более общий механизм может быть использован для удаления/игнорировать все $ -предоставляемые ключи по всему объекту:

console.log(JSON.stringify(myObject, function (key, val) { 
    return key.charAt(0) === "$" ? undefined : val; 
})); 
+0

Еще раз спасибо, вы помогли мне уже в другой теме несколько дней назад. С вашим кодом это стало намного проще. Теперь вывод консоли выглядит примерно так: '{" categoryId ":" - KU8JfAZRCsPJy9uOMqm "," choice ": [{" id ":" choice1 "," option ":" Option 1 "," option_price ": - 2, $$ hashKey ":" object: 189 "}, {" id ":" choice2 "," option ":" Option 2 "," option_price ": 2," $$ hashKey ":" object: 190 "}, { «id»: «choice3», «option»: «Option 3», «option_price»: 5, «$$ hashKey»: «object: 191»}]} '- это любой способ настроить его так, чтобы все $$ hashkeys также отфильтровываются? Тогда результат будет идеально подходит для симулятора. – Oliver

+0

Я обновил ответ. – cartant

+0

Ты гений! Это работает отлично. Еще раз спасибо, это будет постоянной функцией в моей библиотеке. Подобным образом стало намного легче отлаживать большие $ save и $ add процессы. – Oliver