Por defecto, la base de datos en un proyecto en Firebase Console solo es legible / escribible por usuarios administrativos (por ejemplo, en Cloud Functions, o procesos que usan un Admin SDK). Los usuarios de los SDK normales del lado del cliente no pueden acceder a la base de datos, a menos que cambie las reglas de seguridad del lado del servidor.
Puede cambiar las reglas para que la base de datos solo sea legible / escribible por usuarios autenticados:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Consulta el inicio rápido para conocer las reglas de seguridad de la base de datos de Firebase .
Pero como no está iniciando sesión con el usuario desde su código, la base de datos le niega el acceso a los datos. Para resolverlo, deberá permitir el acceso no autenticado a su base de datos o iniciar sesión en el usuario antes de acceder a la base de datos.
Permitir acceso no autenticado a su base de datos
La solución más simple por el momento (hasta que se actualice el tutorial) es ir al panel de la base de datos en la consola para su proyecto, seleccionar la pestaña Reglas y reemplazar el contenido con estas reglas:
{
"rules": {
".read": true,
".write": true
}
}
Esto hace que su nueva base de datos sea legible y escribible por cualquiera que conozca la URL de la base de datos. Asegúrese de asegurar su base de datos nuevamente antes de comenzar la producción, de lo contrario es probable que alguien comience a abusar de ella.
Inicie sesión en el usuario antes de acceder a la base de datos.
Para obtener una solución (un poco) más lenta, pero más segura, llame a uno de los signIn...métodos de autenticación de Firebase para asegurarse de que el usuario haya iniciado sesión antes de acceder a la base de datos. La forma más sencilla de hacerlo es mediante la autenticación anónima :
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Y luego adjunte sus oyentes cuando se detecte el inicio de sesión
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});