【问题标题】:Set on firebase and then set firebase claims在 firebase 上设置,然后设置 firebase 声明
【发布时间】:2020-02-03 14:23:15
【问题描述】:

所以我使用 firebase auth 和数据库来设置新用户到数据库,如果设置成功,我想为该用户设置声明。 所以这意味着我在一个承诺中拥有一个承诺:

function setUser(user){
// no need for the database code before this, but userRef is set properly 
return userRef.set(user)
  .then(succ => {
    return firebase.firebase.auth().setCustomUserClaims(user.key, {admin: true})
    .then(() => {
      console.log("setting claims")
      return true;
    });
  })
  .catch(err => {
    return err
  })
}

调用函数:

app.post("/register_user",jsonParser,async (req, res) => {
 var user = req.body.user;
 let result =  await fireBase.setUser(user);
 res.send(result);

})

发生的情况是我在数据库中获得了集合,但未设置声明,我也看不到日志。我知道这是一个 js 问题,而不是 firebase 问题。我尝试了许多不同的方法(使用等待)但没有奏效。

【问题讨论】:

  • 您是如何确定声明未设置的?如果admin 角色在设置后没有立即出现在客户端代码或安全规则中,请记住,客户端可能需要一个小时才能获得新角色,因此您将拥有等待那么久,或者强制客户端为用户刷新 ID 令牌(通过调用 user.getIdToken(true))。
  • 我还在 setClaims 调用的 return true 之前添加了一个 console.log() ,只是为了确保它确实有效。但它从不打印。
  • 您能否更新问题中的代码以反映更改,并添加您看到的具体日志和未看到的日志?

标签: javascript firebase promise firebase-authentication


【解决方案1】:

firebase.firebase 似乎不正确。您需要使用可以使用 const admin = require('firebase-admin'); 初始化的 admin 对象。这不是 firebase db sdk 的一部分,而是 admin 的一部分。您也可以使用userRef.uid,因为它会为您提供用户文档的ID,如果这是您想要的,请使用您的user.key

return admin.auth().setCustomUserClaims(userRef.uid, {
                            admin: true
                        }).then(() => {
                            //on success
                        });

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多