【问题标题】:Read/write Firebase database with auth - is auth passed automtically?使用身份验证读/写 Firebase 数据库 - 身份验证是否自动传递?
【发布时间】:2018-01-19 14:34:49
【问题描述】:

当我的 Firebase 数据库中有以下规则时:

  {
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

这意味着只有登录用户才能读取和写入我的数据库。 假设用户已通过身份验证,并且我有这些变量:

mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();

还有那个mFirebaseUser != null

我的问题是为已登录用户读取此数据的正确方法是什么?
当我以这种方式读取数据时,它是否以某种方式将 mFirebaseUser != null 发送到数据库?

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot d: dataSnapshot.getChildren()){
                    SomeDataObj cur = d.getValue(SomeDataObj.class);
                    // Do work with SomeDataObj
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

【问题讨论】:

    标签: android firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    如果通过 SDK 访问数据库的用户已登录,则会自动填充安全规则中的 auth 变量。

    因此,您当前的规则允许用户在登录后读取和写入所有数据。

    如果用户未登录并尝试读取/写入数据,则该操作会被数据库拒绝。您需要实现 onCancelled(...) 回调来处理这种情况(并确保它不会被隐藏):

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2022-12-10
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多