Подтвердить что ты не робот

Разрешение пожарной базы отказано

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

У меня есть этот код для отправки данных в 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: ""
});

Однако я продолжаю получать ошибку:

ПРЕДУПРЕЖДЕНИЕ ПОЖАРНАЯ БЕЗОПАСНОСТЬ: установлено в /users/ (GoogleID) не удалось: permission_denied     2016-05-23 22: 52: 42.707 firebase.js: 227 Неподготовлено (в обещании) Ошибка: PERMISSION_DENIED: разрешение отклонено (...)

Когда я пытаюсь посмотреть это, он говорит о правилах для Firebase, который, кажется, находится на языке, который я еще не изучил (или он просто перевернулся). Может кто-нибудь объяснить, что вызывает проблему? Я думал, что я просил его хранить имя электронной почты и имя пользователя, и вам просто не разрешили это делать, но когда я взял их, у меня все еще была такая же проблема. Есть ли способ избежать этой ошибки, не устанавливая правила, или правила, что я могу научить себя тому, как писать за день, или я просто вышел из своей лиги?

Спасибо за любую помощь!

4b9b3361

Ответ 1

По умолчанию база данных в проекте в новой консоли Firebase доступна для чтения/записи только аутентифицированным пользователям:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Смотрите краткое руководство по правилам безопасности базы данных Firebase.

Поскольку вы не входите в систему с помощью своего кода, база данных лишает вас доступа к данным. Чтобы решить эту проблему, вам необходимо либо разрешить неаутентифицированный доступ к вашей базе данных, либо войти в систему перед доступом к базе данных.

Разрешить неаутентифицированный доступ к вашей базе данных

Самый простой обходной путь на данный момент (до тех пор, пока учебник не будет обновлен) - перейти на панель "База данных" в консоли вашего проекта, выбрать вкладку "Правила" и заменить содержимое этими правилами:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Это делает вашу новую базу данных доступной для чтения и записи всем, кто знает URL базы данных. Обязательно защитите базу данных еще раз, прежде чем приступить к работе, иначе кто-то может начать злоупотреблять ею.

Авторизуйтесь перед доступом к базе данных

Для (немного) более трудоемкого, но более безопасного решения вызовите один из методов signIn... аутентификации Firebase, чтобы убедиться, что пользователь signIn... в систему до доступа к базе данных. Самый простой способ сделать это - использовать анонимную аутентификацию:

firebase.auth().signInAnonymously().catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

А затем присоедините слушателей при обнаружении входа

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.
    // ...
  }
  // ...
});

Ответ 2

Я столкнулся с подобной проблемой и обнаружил, что эта ошибка произошла из-за неправильных правил, установленных для операций чтения/записи для базы данных в реальном времени. По умолчанию Google Firebase в настоящее время загружает облачное хранилище, а не базу данных в реальном времени. Нам нужно переключиться на реальное время и применить правильные правила.

enter image description here

Как мы видим, облачное хранилище Firestore не является базой данных реального времени, после переключения на правильную базу данных применяются следующие правила:

{
   "rules": {
       ".read": true,
       ".write": true
     }
 }

Ответ 3

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

Ответ 4

Зайдите в базу данных, рядом с заголовком есть 2 варианта:

Cloud Firestore, База данных в реальном времени

Выберите базу данных в реальном времени и перейдите к правилам

изменить правила на истину.

Это решило мою проблему.

Ответ 5

  1. Откройте FireBase, выберите базу данных на левой стороне.
  2. Теперь с правой стороны выберите [База данных реального времени] из раскрывающегося списка и измените правила на: {"rules": {".read": true, ".write": true}}

оно работает..!!

Ответ 6

Другим решением является создание или авторизация пользователя автоматически, если у вас уже есть необходимые учетные данные. Вот как я это делаю, используя 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);
        });
}

Ответ 7

просто разрешите аутентификацию в вашей базе данных, нажмите на правила и внесите следующие изменения

{"rules": {".read": true, ".write": true}}

Ответ 8

Хорошо, но вы не хотите открывать всю базу данных в реальном времени! Вам нужно что-то вроде этого.

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {
    ".read": "auth.uid !=null",
    ".write": "auth.uid !=null"
  }
}

или

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}