我对Firebase很新,我的安全规则也遇到了问题。我有一个注册或登录新用户的Android客户端。在该用户首次登录时,我将他们的数据保存到firebase,如下所示:
public void onAuthenticated(AuthData authData) {
//Save user data to firebase
Map<String, Object> map = new HashMap<String, Object>();
map.put("provider", authData.getProvider());
ref.child("users").child(authData.getUid()).updateChildren(map);
}
(在验证用户时在onAuthenticated()中调用此方法)
但是,我的安全规则似乎不允许用户写入数据库,除非他们的数据已经存储。我的规则如下:
{
"rules": {
"users":{
"$userid": {
".read": "auth.id == $userid && auth !== null",
".write": "auth.id == $userid && auth !== null"
}
}
}
}
此外,如果重要,这里是一个数据在实际存储时的样子:
如何修改规则以允许客户端在对服务器进行身份验证后编写用户数据?
编辑:经过一些测试后,似乎这些规则不允许用户向其用户节点写入任何内容,即使它已经存在。
答案 0 :(得分:6)
你的规则中有一个错字你有:
".write": "auth.id == $userid && auth !== null"
应该是auth.uid
,而不是auth.id
。
我也会先进行空检查。
所以:
".write": "auth !== null && auth.uid == $userid"