javascript - from - Permiso de Firebase denegado
install firebase (6)
- Abra firebase, seleccione la base de datos en el lado izquierdo.
- Ahora en el lado derecho, seleccione [Base de datos en tiempo real] en el menú desplegable y cambie las reglas a: {"reglas": {".read": verdadero, ".write": verdadero}}
funciona..!!
Soy relativamente nuevo en la codificación y estoy teniendo problemas.
Tengo este código para enviar datos a firebase
app.userid = app.user.uid
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
Sin embargo, sigo recibiendo el error:
ADVERTENCIA SOBRE INCENDIO: establecido en / users / (GoogleID) falló: permission_denied 2016-05-23 22: 52: 42.707 firebase.js: 227 No capturado (en promesa) Error: PERMISSION_DENIED: Permiso denegado (...)
Cuando trato de buscar esto, habla sobre las reglas para Firebase, que parece estar en un idioma que aún no he aprendido (o simplemente me está pasando por la cabeza). ¿Alguien puede explicar qué está causando el problema? Pensé que era porque estaba pidiendo que almacenara el correo electrónico y el nombre para mostrar del usuario y simplemente no se me permitía hacer esto, pero cuando los saqué, todavía tenía el mismo problema. ¿Hay alguna manera de evitar este error sin establecer las reglas, o las reglas son algo que puedo aprender a escribir en un día, o simplemente estoy fuera de mi alcance?
¡Gracias por cualquier ayuda!
Ir a la base de datos, al lado del título hay 2 opciones:
Cloud Firestore, base de datos en tiempo real
Seleccione la base de datos en tiempo real y vaya a las reglas
cambia las reglas a verdadero.
Esto resolvió mi problema.
Me enfrentaba a un problema similar y descubrí que este error se debía a reglas incorrectas establecidas para las operaciones de lectura / escritura para la base de datos en tiempo real. Por defecto, google firebase actualmente carga la tienda en la nube, no la base de datos en tiempo real. Necesitamos cambiar al tiempo real y aplicar las reglas correctas.
Como podemos ver, dice que Cloud Firestore no es una base de datos en tiempo real, una vez que se cambia a la base de datos correcta, aplique las siguientes reglas:
{
"rules": {
".read": true,
".write": true
}
}
Otra solución es crear o iniciar sesión automáticamente en el usuario si ya tiene las credenciales a mano. Así es como lo hago usando Plain JS.
function loginToFirebase(callback)
{
let email = ''[email protected]'';
let password = ''xxxxxxxxxxxxxx'';
let config =
{
apiKey: "xxx",
authDomain: "xxxxx.firebaseapp.com",
projectId: "xxx-xxx",
databaseURL: "https://xxx-xxx.firebaseio.com",
storageBucket: "gs://xx-xx.appspot.com",
};
if (!firebase.apps.length)
{
firebase.initializeApp(config);
}
let database = firebase.database();
let storage = firebase.storage();
loginFirebaseUser(email, password, callback);
}
function loginFirebaseUser(email, password, callback)
{
console.log(''Logging in Firebase User'');
firebase.auth().signInWithEmailAndPassword(email, password)
.then(function ()
{
if (callback)
{
callback();
}
})
.catch(function(login_error)
{
let loginErrorCode = login_error.code;
let loginErrorMessage = login_error.message;
console.log(loginErrorCode);
console.log(loginErrorMessage);
if (loginErrorCode === ''auth/user-not-found'')
{
createFirebaseUser(email, password, callback)
}
});
}
function createFirebaseUser(email, password, callback)
{
console.log(''Creating Firebase User'');
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function ()
{
if (callback)
{
callback();
}
})
.catch(function(create_error)
{
let createErrorCode = create_error.code;
let createErrorMessage = create_error.message;
console.log(createErrorCode);
console.log(createErrorMessage);
});
}
Por defecto, la base de datos en un proyecto en la nueva consola Firebase solo es 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 .
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 métodos de
signIn...
de
signIn...
de
Autenticación
de
Firebase
para asegurarse de que el usuario haya
signIn...
antes de acceder a la base de datos.
La forma más sencilla de hacer esto es
mediante 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.
// ...
}
// ...
});
WORKING!!
Go to the "Database" option you mentioned.
1. There on the Blue Header you''ll find a dropdown which says Cloud Firestore Beta
2. Change it to "Realtime database"
3. Go to Rules and set .write .read both to true
Let me know how it goes.
copied from
https://github.com/firebase/quickstart-js/issues/239