Firebase createUser然后在云函数中设置CustomUserClaims

Firebase createUser然后在云函数中设置CustomUserClaims,firebase,google-cloud-firestore,google-cloud-functions,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在尝试创建一个用户,设置自定义声明,然后使用云函数将数据设置到firestore。下面的代码适用于firebase Service,只是想从firebase社区获得一些反馈。因为我正在嵌套then()它也会发出警告。还有更好的办法吗 这是我的密码: app.post('/register', (request, response) => { const data = request.body; firebase.auth().createUser(data) .the

我正在尝试创建一个用户,设置自定义声明,然后使用云函数将数据设置到
firestore
。下面的代码适用于
firebase Service
,只是想从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);
    })
})

我将承诺如下:

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(数据)
更改为
admin.auth().createUser(数据)
,因为
createUser()
方法属于admin SDK,请参阅。我对
admin.firestore()
也做了同样的操作

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

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

谢谢,干得好!一件奇怪的事情是,ESLint在成功时抛出了一个错误,所以我不得不使用
返回response.send({success:'success'})
wird