我需要访问我的" myapp.firebase.io/events"节点只能访问任何经过身份验证的用户(由firebase身份验证进行身份验证)。我的规则是 -
{
"rules": {
"events": {
".read":"auth != null",
".write":"auth != null"
}
}
}
我的活动是:
public class NotificationActivity extends AppCompatActivity {
TextView message,header;
private Toolbar mToolbar;
String from;
private Firebase ref;
private FragmentDrawerNotification mDrawerFragment;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
mToolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(mToolbar);
mAuth = FirebaseAuth.getInstance();
message = (TextView) findViewById(R.id.tMessage);
header = (TextView) findViewById(R.id.tHeader);
from=getIntent().getExtras().getString("From");
if(from.equals("Events"))
{
header.setText("Events: ");
message.setText("");
System.out.println(mAuth.getCurrentUser().getEmail());
//System.out.println("Events Auth"+ref.getAuth());
ref = new Firebase("https://myapp.firebaseio.com/events");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String data =dataSnapshot.getValue(String.class);
message.setText(data);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
下面
System.out.println(mAuth.getCurrentUser().getEmail());
正在返回已登录用户的电子邮件,但ref.getAuth()
返回null;
因此,登录的用户无法访问数据并获取" Firebase错误:权限被拒绝"
这里"事件"是我的关键,"今天有一个活动"是我的价值。
如果我使用
{
"rules": {
"events": {
".read":true,
".write":true
}
}
}
我可以访问它,但我需要使用经过身份验证的用户来保护数据库。
答案 0 :(得分:0)
您似乎将旧版Firebase的使用与新的Firebase API混合使用。
//legacy: com.firebase:firebase-client-android:2.5.2+
ref = new Firebase("https://myapp.firebaseio.com/events");
//com.google.firebase:firebase-auth:9.4.0
mAuth = FirebaseAuth.getInstance();
您的项目是否在console.firebase.google.com控制台中?如果是这种情况,请删除此依赖项
com.firebase:firebase-client-android:2.5.2+
,包含com.google.firebase:firebase-database:9.4.0
,并按照此guide了解如何使用新的Firebase API获取数据库参考:
//com.google.firebase:firebase-database:9.4.0
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
我假设您已经正确实施Firebase Auth,因为您似乎拥有经过身份验证的用户。