我正在尝试为Firebase实时数据库设置规则,但我不知道为什么它们不起作用。这是数据顶部的样子:
说我想允许用户读取其用户名与该数据中的名称字段匹配的数据。我以为这样的事情会起作用
{
"rules": {
"lauri_laurela" :{
"$requestid" :{
".read" : "data.child('name').val() == auth.token.name",
}
}
}
}
不幸的是,这对我不起作用。我甚至为了学习而尝试了
{
"rules": {
"lauri_laurela" :{
"$requestid" :{
".read" : "data.child('name').exists()",
}
}
}
}
甚至
{
"rules": {
"lauri_laurela" :{
"$requestid" :{
".read" : true,
}
}
}
}
这怎么起作用
{
"rules": {
"lauri_laurela" :{
".read" : true,
}
}
}
答案 0 :(得分:0)
auth.token.name仅在设置了名称时才有效。因此,请确保您已将用户名保存在其Firebase身份验证配置文件中。您可以使用以下代码执行此操作。
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("User name")
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated. Now security rules work");
}
}
});
要确保用户名已保存,您可以将安全规则更改为
"auth.token.name!==null && data.child('name').val() == auth.token.name"
或
"auth.token.name!=="" && data.child('name').val() == auth.token.name"
不确定哪个有效!希望对您有帮助。