Firebase Admin SDK - 使用自定义字段创建用户

Firebase Admin SDK - Create user with custom fields

我一直在关注 Firebase SDK Admin - Manager User 文档,它的系统为我找到了一切。无论哪种方式,我都想用名字、姓氏、国籍等字段扩展我的用户信息。

现在我正在使用 Vue.JS(前端)、Axios(Http 客户端)和 Express.js(服务器)来管理我的项目,这是我创建用户的方式:

Vue.JScreateUser方法:

createUser() {
      axios.post('http://localhost:3000/users',
      {
        username: this.username,
        email: this.email,
        firstName: this.firstName,
        lastName: this.lastName,
        password: this.password,
      }).then(r => {
        console.log(r)
      }).catch(e => {
        console.log(e)
      })
      // createUser
    }

每个字段:usernameemailfirstName 等...从通用的 HTML 表单中获取其值,它们工作得很好。

这是我在服务器端的"user create"路由:

router.post('/', function (req, res, next) {
  firebase.auth().createUser({
    email: req.body.email,
    username: req.body.username,
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    emailVerified: false,
    password: req.body.password,
    disabled: false
  }).then(function(userRecord) {
    console.log("Successfully created new user:", userRecord.uid);
  }).catch(function(error) {
    console.log("Error creating new user:", error);
  });
});

这就是我检索用户信息的方式:

router.get('/', function(req, res, next) {
  firebase.auth().listUsers()
  .then(function(listUsersResult) {
    res.send(listUsersResult.users);
  }).catch(function(error) {
    console.log("Error listing users:", error);
  })
});

问题是我无法获取我添加的自定义字段(或者它们根本不存在)。这是我使用下一种方法获得数据后的图片:

getItems() {
      axios.get('http://localhost:3000/users').then(r => {
        this.users = r.data
      }).catch(e => {
        console.log(e)
      })
    },

有没有办法在我的用户创建时设置自定义字段或(如果我的过程是正确的)检索它们的方法?

Firebase 用户不可自定义,遗憾的是您无法向用户添加自定义字段...check out these docs for the properties of this object. Also check out this question & answer Frank 解释说您需要单独存储任何额外信息...这通常在table(在您的数据库中命名为 /userDetails)。

2022 年 2 月编辑:

自从写下这个答案后,custom user claims are now a thing. It's meant for authentication / rules purposes and not data-storage, so most things should still be kept in the database as originally stated. Note that you CAN access the custom fields client-side

请记住,这是将额外的数据添加到随每个服务器请求一起发送的 ID 令牌中,因此您应该尝试将其使用限制在基于 role/permission 的事物上,而不是图像数据用于第二个人资料头像。阅读官方文档中的best practices for custom claims

您可以在创建后立即设置用户的个人资料。

firebase.auth().createUserWithEmailAndPassword(
    email,
    password,
).then(credential => {
    if (credential) {
        credential.user.updateProfile({
            displayName: username
        })
    }
}