我无法访问Firestore安全规则中的自定义声明

时间:2018-02-21 12:09:11

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

我已使用firebase admin sdk设置了自定义声明。我已成功使用它来控制前端甚至RTDB中的访问,但我无法将其与Firestore数据库一起使用。这是我的安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.token.admin == true;  
    } 
  }
}

以下是我的应用中的代码:

   const users = []
   firebase.firestore().collection('users')
    .get()
    .then(function (querySnapshot) {
      querySnapshot.forEach(function (doc) {
        users.push(doc.data())
      })
    })
    .then(() => {
      commit('setUsersList', users)
      commit('setLoading', false)
    })
    .catch(function (error) {
      console.log('Error getting documents:', error)
      commit('setLoading', false)
    })

这是我得到的错误:

Error: Missing or insufficient permissions

1 个答案:

答案 0 :(得分:3)

我修复了错误。我的错误是我使用admin sdk设置权限,但我没有传递布尔值而是字符串。

例如,我正在使用uid'1'设置用户: axios.post('/admin/setadminprivileges/1/true')

在我的firebase函数中,我得到了:

app.post('/admin/setadminprivileges/:id/:permission', (req, res) => {
  const permission = req.params.permission // this is a string "true"
  const uid = req.params.id // "1"
  const payload = {admin: permission}
  admin.auth().setCustomUserClaims(uid, payload)
})

现在这个工作正常:

app.post('/admin/setadminprivileges/:id/:permission', (req, res) => {
  const permissionString = req.params.permission
  const permission = permissionString === 'true' // this is now a boolean
  const uid = req.params.id
  const payload = {admin: permission}
  admin.auth().setCustomUserClaims(uid, payload)
})

非常感谢。我知道它必须是我自己的一个愚蠢的问题,因为Firebase是一个坚实的产品。