Я использую две службы Firebase: базу данных реального времени и аутентификацию в моем приложении React. Я использовал аутентификацию по электронной почте/паролю и базовую базу данных для приложения инвентаризации, состоящего из трех основных узлов: инвентарь, партии и незавершенные работы. В моем приложении реагирования я создал страницу входа, которая позволяет пользователям входить в систему через API аутентификации.
const handleSignIn = async (values) => {
signInWithEmailAndPassword(
auth,
values.username,
values.password
)
.then((userCredential) => {
sessionStorage.setItem("user", values.username);
sessionStorage.setItem(
"login",
true
);
const user = userCredential.user;
history.push("/inv");
setMsg(null);
})
.catch((error) => {
setMsg("The Email or Password is Invalid");
console.info(error);
});
};
А также есть ли какие-либо предложения по использованию хранилища сеансов для определения статуса входа в систему. Я использовал это, потому что сайт часто перезагружается.
Моя основная проблема заключается в том, что я хочу, чтобы данные внутри базы данных Realtime были доступны для чтения и записи только аутентифицированным пользователям, которые входят в систему через аутентификацию.
Правила базы данных реального времени:
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}
Я перепробовал все, что есть в документации Firebase, но ничего не работает.





Есть ли какие-либо предложения (...) по определению статуса входа?
Рекомендуемый подход — «присоединить наблюдателя к глобальному объекту аутентификации», как описано в документации .
Я хочу, чтобы данные внутри базы данных Realtime были доступны только для чтения и доступны для записи аутентифицированным пользователям, которые входят в систему через аутентификация
Как вы увидите в документации вам необходимо связать правило с путем к базе данных реального времени.
Примеры из документации:
{
"rules": {
"foo": { // <==== DB path
".read": true,
".write": false
}
}
}
или
{
"rules": {
"parent_node": { // <==== DB path for parent
"child_node": { // <==== DB sub-path for child
".read": <condition>,
".write": <condition>,
".validate": <condition>,
}
}
}
}