首页 > 解决方案 > Firebase 管理员 SDK 角色

问题描述

我正在 NodeJS、Express API 中设置 Firebase Admin SDK。

我添加了一个端点,允许我创建一个用户 -

  route.post('/create', (req, res) => {
    const { email, password } = req.body

    fbseAdmin.auth().createUser({ email, password })
      .then((userRecord) => {
        res.status(200).json({ userRecord })
      })
  })

但是,我想做的是确保用户具有角色,以便我可以对某些服务进行授权检查。

我不明白我怎么能做到这一点?我在想也许我在实时数据库中添加了一个条目,比如 -

users/uid/roles/<role name>: true

但是我不确定我是否遗漏了什么。另外,如果是这种情况并且我确实需要这样做,我会这样做 -

  route.post('/create', (req, res) => {
    const { email, password } = req.body

    fbseAdmin.auth().createUser({ email, password })
      .then((userRecord) => {
        fbseAdmin.database()
          .ref('users')
          .child(`${userRecord.uid}/roles`)
          .set({
              admin: true
            })

        res.status(200).json({ userRecord })
      })
  })

至少可以说,这似乎有点脆弱。

此外,由于此条目不是用户对象的一部分,因此每次我想验证时都需要在实时数据库中查找?那是对的吗?

标签: node.jsfirebasefirebase-realtime-databasefirebase-authenticationfirebase-admin

解决方案


您应该了解如何针对用户设置自定义声明

  route.post('/create', (req, res) => {
    const { email, password } = req.body

    fbseAdmin.auth().createUser({ email, password })
      .then((userRecord) => {
        fbseAdmin.auth().setCustomUserClaims(userRecord.uid, { admin: true })
          .then(() => {
            res.status(200).json({ userRecord })
          })
      })
  })

推荐阅读