Firebase Admin SDK角色

时间:2018-09-18 08:36:30

标签: node.js firebase firebase-realtime-database firebase-authentication firebase-admin

我正在使用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 })
      })
  })

至少可以说这有点脆弱。

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

1 个答案:

答案 0 :(得分:2)

您应该查看如何设置custom claim against a user

  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 })
          })
      })
  })