Firebase createUser然后在Cloud Functions中设置CustomUserClaims

时间:2018-10-31 16:08:04

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

我正在尝试创建用户,设置自定义声明,然后使用云功能将数据设置到firestore中。下面的代码可以与firebase serve配合使用,只需要Firebase社区的一些反馈。由于我嵌套then(),因此也会发出警告。有什么更好的方法吗?

这是我的代码:

app.post('/register', (request, response) => {
  const data = request.body;

  firebase.auth().createUser(data)
    .then((userRecord) => {

      firebase.auth().setCustomUserClaims(userRecord.uid, { admin: true }
        .then(() => {
          db.collection("users").doc().set(data)
            .then((payload) => {
              return response.send({ success: 'success' });
            })
            .catch((error) => {
              return response.send(error);
            })
        })
        .catch((error) => {
          return response.send(error);
        })

      return response.send(successMsg);

    })
    .catch((error) => {
      return response.send(error);
    })
})

1 个答案:

答案 0 :(得分:1)

我将按如下方式承诺:

app.post('/register', (request, response) => {
  const data = request.body;

  admin.auth().createUser(data)
  .then((userRecord) => {
      return admin.auth().setCustomUserClaims(userRecord.uid, { admin: true });
  })
  .then(() => {
      return admin.firestore().collection("users").doc().set(data);
  })      
  .then(() => {
      response.send({ success: 'success' });   //Don't need to return here, since it is an HTTPS Cloud Function, just send the response
  })
  .catch((error) => {
      response.status(500).send(error);
  })
})

请注意,由于firebase.auth().createUser(data)方法属于Admin SDK,因此我已将admin.auth().createUser(data)更改为createUser(),请参见https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createUser。我对admin.firestore()做过同样的事情。

您可以保留firebase变量/常量名称,但随后需要将Admin SDK声明为

const firebase = require('firebase-admin');