Firebase规则不起作用。即使在Firestore中设置规则也要返回数据

时间:2019-01-09 06:40:54

标签: firebase react-native google-cloud-firestore firebase-security-rules

我设置了Firebase Functions来调用我的Firestore。我正在使用admin.auth()并返回数据。我在“ Firestore规则”部分中设置了自定义规则,但是“功能”未遵循规则,即当我在邮递员中使用URL时,我不应该获取数据,因为它不满足“如果读,写:如果请求” .auth!= null”。我该如何解决?

这是我的Firebase功能代码:

const admin = require('firebase-admin');

module.exports = function(req, res) {
  const uid = req.body.uid;

  admin
    .auth()
    .getUser(uid)
    .then(user => {
      admin
        .firestore()
        .collection('discover')
        .get()
        .then(snapshot => {
          res.send(
            snapshot.docs.map(doc => {
              const data = Object.assign({ doc_id: doc.id }, doc.data());
              return data;
            })
          );
        })
        .catch(err => {
          res.send({ message: 'Something went wrong!', success: false });
        });
    })
    .catch(err => {
      res.send({ error: 'Something went wrong!', success: false });
    });
};

Firestore规则:

service cloud.firestore {
  match /databases/{database}/documents {

      match /users/{users} {
    allow read: if request.auth != null;
      }
      match /discover/{discover} {
    allow read: if request.auth != null;
      }
      match /favorites/{favorite} {
    allow read, write: if request.auth != null;
      }
    }

}

我不应该从邮递员那里获取数据(因为我没有通过身份验证),但是我仍然在获取数据。如果用户未登录,我不希望访问数据。

1 个答案:

答案 0 :(得分:2)

当您通过Admin SDK访问数据库时,或任何其他时间使用服务帐户时,安全规则将不适用。使用邮递员(或其他任何HTTP客户端)都没有关系。实际在这里进行数据库访问的是Admin SDK。