Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据库权限被拒绝错误_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase数据库权限被拒绝错误

Javascript Firebase数据库权限被拒绝错误,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在制作一个显示事件的应用程序。我创建了一个页面,其中显示了事件的摘要,并链接到完整的事件详细信息。我在文档中读到,可以通过向URL()添加.json来检索数据库对象。我的应用程序使用JavaScript构建指向每个对象的链接,但是,当单击链接时,即使我以用户身份登录应用程序,我也会收到一个权限拒绝错误。有人知道如何解决这个问题吗? 我在Codepen上有一个应用程序的演示:。注意:登录应用程序后,您必须刷新页面才能查看内容 基本上,我要做的是创建一个“readmore”链接,指向完整数据库对

我正在制作一个显示事件的应用程序。我创建了一个页面,其中显示了事件的摘要,并链接到完整的事件详细信息。我在文档中读到,可以通过向URL()添加.json来检索数据库对象。我的应用程序使用JavaScript构建指向每个对象的链接,但是,当单击链接时,即使我以用户身份登录应用程序,我也会收到一个权限拒绝错误。有人知道如何解决这个问题吗? 我在Codepen上有一个应用程序的演示:。注意:登录应用程序后,您必须刷新页面才能查看内容

基本上,我要做的是创建一个“readmore”链接,指向完整数据库对象的扩展视图。有人知道如何使用Firebase吗

以下是相关的JavaScript代码:

var events = firebase.database().ref("events");

    // displays event listings 
    events.on('value', function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
        var eventkey = childSnapshot.key;
        var eventdata = childSnapshot.val();
        var browseId = eventkey.toString(); 
        var showcards = document.getElementById('showcards');

        // listing data to be displayed
        var browseTitle = childSnapshot.val().title;
        var browseDate = childSnapshot.val().starttime;
        var browseCity = childSnapshot.val().city;
        var browseCost = childSnapshot.val().price;
        var dbUrl = "https://authtest-54513.firebaseio.com/events/";
        var addJson = ".json";
        var evUrl = dbUrl+eventkey+addJson;
          // event card
        var card = document.createElement('div');
        card.setAttribute('class', 'card'); // assign class card to div for css styling
        showcards.appendChild(card);


          // display all listings on page
        var cardtitle = document.createElement('p'); 
          cardtitle.setAttribute('id', 'evdata'); 
        cardtitle.innerHTML = browseTitle + " " + " " + browseCity + " " + "£" + browseCost;
        card.appendChild(cardtitle);  

          var showUrl = document.createElement('a');
          showUrl.setAttribute('href', evUrl);
         // showUrl.innerHTML = "more...";
          showUrl.innerHTML = evUrl;
          card.appendChild(showUrl);

        console.log(eventdata);
  });  // end foreach childSnapshot function
}); // end events.on function
我的安全规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
      "user-events": {
        ".indexOn": ["uid"],
        "$uid": {
          ".read": "auth != null && auth.uid == $uid",
          ".write": "auth != null && auth.uid == $uid"
        }
    }
  }
}

当您通过firebase SDK发出请求时,它会通过向每个请求传递一个令牌来保持身份验证状态,该令牌是一段包含会话信息的信息。当您切换
authenticated
时,您可以在模拟器中看到这方面的示例

当您尝试打开像
https://authtest-54513.firebaseio.com/events/-KnP3MkFt5559uP1w5fh.json
您正在发出GET请求,但没有传递任何令牌来验证您的身份,因此如果您的安全规则阻止未经身份验证的用户执行任何操作(
auth!=null
),则此操作将不起作用

无论如何,我认为这是一件非常奇怪的事情,json可在
https://authtest-54513.firebaseio.com/events/-KnP3MkFt5559uP1w5fh.json
包含与变量中相同的数据
eventdata
。 您可以使用
JSON.stringify(eventdata)
来获得单击链接时看到的相同字符串,或者将
eventdata
迭代为javascript对象并创建一个漂亮的html模板


开发一个应用程序通常不需要使用,但如果您想使用它们,您可能需要看看

感谢Devid。如果我使用JSON stringify,如何实现“阅读更多”链接?我之所以使用RESTAPI,是因为我希望将用户带到一个新页面以查看完整的对象详细信息。还有别的办法吗?我在这里发布了一个问题,因为我使用了一个模式,但它只显示了第一个对象:我刚刚将用户的令牌添加到GET请求中,但现在收到“Unauthorized request”错误。今天晚些时候我将查看另一个问题;)对于
未经授权的请求
请创建另一个问题,因为这是另一个问题,您应该提供更多数据。如果这回答了你最初的问题,请考虑接受它;你有答案这一部分的例子吗?“将eventdata作为javascript对象进行迭代,并创建一个漂亮的html模板。”