繁体   English   中英

Firebase错误:已认证用户的权限被拒绝

[英]Firebase Error: permission denied for Authenticated user

我只需要对任何经过身份验证的用户(由firebase auth进行身份验证)的“ myapp.firebase.io/events”节点具有访问权限。 我的规则是-

{
  "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
      }
   }
}

我可以访问它,但是我需要使用经过身份验证的用户来保护数据库。

您似乎在混合使用旧版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并按照此指南获取有关数据库的参考使用新的Firebase API:

    //com.google.firebase:firebase-database:9.4.0
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("message");

我假设您已经正确实施了Firebase Auth,因为您似乎已通过身份验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM