mon*_*njo 5 firebase firebase-security google-cloud-firestore
我使用 firebase admin sdk 设置了自定义声明。我已经成功地使用它来控制前端甚至 RTDB 的访问,但我无法将它与 Firestore 数据库一起使用。这是我的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.token.admin == true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序中的代码:
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)
})
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error: Missing or insufficient permissions
Run Code Online (Sandbox Code Playgroud)
我已经修复了错误。我的错误是我使用 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)
})
Run Code Online (Sandbox Code Playgroud)
现在这个工作正常:
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)
})
Run Code Online (Sandbox Code Playgroud)
不管怎么说,还是要谢谢你。我知道这一定是我自己的一个愚蠢问题,因为 Firebase 是一款可靠的产品。
归档时间: |
|
查看次数: |
3773 次 |
最近记录: |