我已使用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
答案 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是一个坚实的产品。