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