我有一个调用addCheckin()
方法的页面,它位于控制器内部。在控制器中,我尝试按如下方式创建引用:
var ref = firebase.database().ref("users/" + $scope.whichuser + "/meetings/" +$scope.whichmeeting + "/checkins");
$scope.whichuser
和$scope.whichmeeting
是我从另一条路线传递的$routeParams
。
这是我的签到控制器 -
myApp.controller("CheckinsController",
['$scope','$rootScope','$firebaseArray','$routeParams','$firebaseObject',
function($scope,$rootScope,$firebaseArray,$routeParams,$firebaseObject){
$scope.whichuser = $routeParams.uid;
$scope.whichmeeting = $routeParams.mid;
var ref = firebase.database().ref("users/" + $scope.whichuser + "/meetings/" +$scope.whichmeeting + "/checkins");
$scope.addCheckin = function(){
var checkinInfo = $firebaseArray(ref);
var data={
firstname:$scope.firstname,
lastname:$scope.lastname,
email:$scope.email,
date:firebase.database.ServerValue.TIMESTAMP
}
checkinInfo.$add(data);
}
}]);/*controller*/
我在这里遇到两个错误 -
错误1:
Error: permission_denied at /users/Vp2P1MqKm7ckXqV2Uy3OzTnn6bB3/meetings: Client doesn't have permission to access the desired data.
错误2:
Error: permission_denied at /users/Vp2P1MqKm7ckXqV2Uy3OzTnn6bB3/meetings/-KT5tqMYKXsFssmcRLm6/checkins: Client doesn't have permission to access the desired data.
这就是我要实现的目标 -
答案 0 :(得分:28)
转到应用的Firebase控制台
从侧面菜单中选择数据库 - >从上方的标签中选择规则 - >像这样更新您的规则
{
"rules": {
".read": true,
".write": true
}
}
希望它能解决你的问题。谢谢:))
答案 1 :(得分:1)
为了授予所有经过身份验证的用户访问权限,请转到 firebase Web控制台中的数据库规则标签,然后复制/粘贴以下规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
答案 2 :(得分:1)
这些答案都没有提供设置实时数据库的最安全方法。
此规则应适用于所有情况:
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
答案 3 :(得分:0)
似乎可以写入/ users / {uid}路由,但无法读取它们。我将/ users更改为/ userx,它立即开始工作。
答案 4 :(得分:0)
默认情况下,Firebase项目以Firestore作为数据库开始。
如果应用程序使用“ Firebase实时数据库”并且未配置其权限,则可能发生此问题。应该明确授予对Firebase实时数据库的读写权限。
为此,请在Firebase控制台中,从“数据库”>“规则”>“设置”旁边的下拉菜单中选择“数据库”>“选择实时数据库”,而不是“ Firestore Beta”。
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
".read": true,
".write": true
}
}
希望有帮助!
答案 5 :(得分:0)
所有提供的答案都包含一个安全问题,每个人都可以在数据库中写入/删除条目,例如,如果使用不当,可能会导致大量费用或完全丢失数据。
当然,您需要使用Firebase身份验证功能来使用这些规则,但是默认情况下,禁止匿名访问具有默认权限。以下规则在保持安全性的同时为所有人提供了读取权限。
{
"rules": {
".read": true,
".write": "auth.uid != null"
}
}
答案 6 :(得分:0)
我希望这可以为您提供帮助。
{
".read": true,
".write": "auth !== null && root.child('users').child(auth.uid).child('meetings').val() === true"
}
您可以删除字符串 && root.child('users').child(auth.uid).child('meetings').val() === true"
结果相同。
答案 7 :(得分:0)
请使用以下代码在Firebase中注册自己
Firebase.auth()
.createUserWithEmailAndPassword(email, password)
.then((data) => console.log(data))
.catch(error => console.log(error))
并通过以下代码使用注册的电子邮件和密码对您的身份进行验证
Firebase.auth()
.signInWithEmailAndPassword(email, password)
.then((data) => console.log(data))
.catch(error => console.log(error))
在实时数据库中使用以下规则
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
然后您将能够自动访问实时数据库中的数据
var ref = firebase.database().ref("users");
ref.on("value", function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childData = childSnapshot.val();
var id=childData.id;
console.log(childData);
});
});
注销时,将以下命令添加到应用程序注销
Firebase.auth().signOut()