【问题标题】:I don't have access to custom claims from firestore security rules我无权访问来自 Firestore 安全规则的自定义声明
【发布时间】:2018-02-21 12:09:10
【问题描述】:

我使用 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

【问题讨论】:

  • 请添加导致错误的代码
  • 嗨。我用我的应用代码编辑了我的问题
  • Cloud Firestore Security Rules Reference 文档指出“如果使用自定义身份验证,request.auth.token 还包含开发人员指定的任何自定义声明。”因此,除非您的令牌中缺少管理员声明/不正确,或者我缺少某些内容,否则我不明白为什么它不起作用。希望其他人可能有答案
  • 能否强制刷新用户的 ID 令牌?根据我的询问,可能需要让自定义声明显示在安全规则中。
  • 我用getIdToken(true) 做了一个刷新令牌,但我仍然遇到同样的错误。 :(

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


【解决方案1】:

我已经修复了错误。我的错误是我使用 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 是一款可靠的产品。

【讨论】:

  • 云功能如何与策略协同工作?有什么建议吗?
  • @monjo 您能否发布一张屏幕截图,其中这些声明存储在 Firestore 中?是否可以设置/删除某些声明抛出 Cloud Firestore 用户界面?
  • 我认为没有 GUI 可以让您查看或编辑这些声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 2018-07-23
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多