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
}
每个字段:username
、email
、firstName
等...从通用的 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
})
}
}
我一直在关注 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
}
每个字段:username
、email
、firstName
等...从通用的 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
})
}
}