这是在firebase上定义规则的方式:
{
"rules": {
"users": {
".read": true,
"$user_id": {
".write": "auth.uid === $user_id",
".read" : true
}}}}
我已经使用setValue()成功地在我的注册活动中编写了新的用户信息,就像下面一样,并且每次我都没有认证问题时,还使用push()。setValue()添加了新注释。新用户直接写入http://DB/users/,而评论被添加得非常深。
这是一个代码snippit,我的代码命中日志:数据无法保存。每次。
AuthData authData = newRef.getAuth();
if (authData != null) {
Log.v(LOG_TAG, "Auth as " + authData.getUid());
Map<String, Object> newEntry = new HashMap<String, Object>();
newEntry.put("Name", name);
newEntry.put("Description", desc);
newEntry.put("DueDate", date);
newEntry.put("Status", 0);
newRef.setValue(newEntry, new Firebase.CompletionListener() {
@Override
public void onComplete(FirebaseError firebaseError, Firebase firebase) {
if (firebaseError != null) {
Log.v(LOG_TAG, "Data could not be saved. " + firebaseError.getMessage()); //Hits here every time.
} else {
Log.v(LOG_TAG, "Data saved successfully. Finishing activity...");
finish();
}
}
});
;
}
else{
Log.v(LOG_TAG, "No authdata");
}
希望我提供了足够的信息,我猜这个问题在于安全/规则,但任何方向/指导都会非常感激。谢谢。
答案 0 :(得分:26)
我太过坚持这一点了,这就是帮助我的原因。
首先,有两种类型的用户可以从firebase访问数据库
默认情况下,它设置为未授权,但是他们既没有读取也没有写入的任何权限,所以最初如果您尝试执行任何操作权限被拒绝错误。
如何根据您的要求进行更改?
<强>解决方案:强>
在“数据库”部分下,转到“规则”选项卡。 URL将与您的项目名称相似。
https://console.firebase.google.com/project/project-name/database/rules
你会在这里看到这样的事情:
{
"rules": {
".read": "auth != null", //non-authorised users CANT read
".write": "auth != null" //non-authorised users CANT write
}
}
只需将其更改为
即可{
"rules": {
".read": "auth == null", //even non-authorised users CAN read
".write": "auth == null" //even non-authorised users CAN write
}
}
根据您的要求进行更改。快乐的编码:)
答案 1 :(得分:1)
我的数据库参考中有错误的路径。
答案 2 :(得分:0)