Я могу придумать два способа приблизиться к чему-то вроде этого:
1.Использование облачной функции:
Установите правило записи false
и используйте облачную функцию для обновления.Облачная функция будет принимать код в качестве входных данных, проверять, соответствует ли он ожидаемому коду, и выполнять обновления от имени пользователя.Например:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
exports.updateObject = functions.https.onCall((data, context) => {
const uid = data.uid;
const code = data.code;
const codeRef = admin.database().ref(`waitingForApproval/${uid}/code`);
return codeRef.once('value').then((codeSnapshot) => {
if (codeSnapshot.val() === code) {
// Make updates on the user's behalf
}
});
});
2.Сохранение введенного пользователем кода в БД:
Добавьте редактируемый пользователем раздел, в котором пользователи могут устанавливать свои коды и проверять их, например:
БД после ввода пользователем кода:
"userCodes": {
"bXUQ6PRNqvOgjwoAlm6HmYuWiYo1": {
"BQUyhq)w3D": true,
},
...
}
Установите ваше правило, чтобы проверить, установил ли пользователь код для объекта:
"waitingForApproval": {
"$uid": {
".write": "root.child('userCodes').child($uid).child(data.child('code').val()).val() == true"
".read": "auth != null && $uid === auth.uid"
}
},
Что по существу проверяет, установлено ли userCodes/{uid}/{code}
на true
, прежде чем разрешитьthe write.
(Обратите внимание, что при использовании этого метода ваши коды не могут содержать символы, которые firebase не поддерживает в своих ключах:. $ # [] /)