Javascript 无法在Firestore中将数据正确添加到自定义用户集合 问题
我想将几个用户数据添加到firestore Authenticateced用户列表和我自己同时创建的Javascript 无法在Firestore中将数据正确添加到自定义用户集合 问题,javascript,reactjs,firebase,vue.js,google-cloud-firestore,Javascript,Reactjs,Firebase,Vue.js,Google Cloud Firestore,我想将几个用户数据添加到firestore Authenticateced用户列表和我自己同时创建的用户集合中,但这并不顺利用户集合仅更新其一部分 资料 //javascript 用户:[ {电子邮件:“n_0@example.com,用户名:“user0”}, {电子邮件:“n_1@example.com,用户名:“user1”}, {电子邮件:“n_2@example.com,用户名:“user2”}, {电子邮件:“n_3@example.com,用户名:“user3”}, {电子邮件:“
用户
集合中,但这并不顺利<代码>用户集合仅更新其一部分
资料
//javascript
用户:[
{电子邮件:“n_0@example.com,用户名:“user0”},
{电子邮件:“n_1@example.com,用户名:“user1”},
{电子邮件:“n_2@example.com,用户名:“user2”},
{电子邮件:“n_3@example.com,用户名:“user3”},
{电子邮件:“n_4@example.com,用户名:“user4”}
]
代码
//javascript
从“firebase/app”导入*作为应用程序
导入“firebase/auth”
const config=JSON.parse(process.env.VUE\u APP\u FIREBASE\u config)
app.initializeApp(配置)
export const firebase=app
export const auth=app.auth()
函数asyncCreateUser(用户){
返回auth.createUserWithEmailAndPassword(
user.email,
“密码”
).then(函数(createdUser){
console.log('--')
console.log('user.email',user.email)
console.log('createdUser',createdUser.user.email)
const ref=usersRef.doc(createdUser.user.uid)
返回参考集(用户)
})
}
this.users.map(用户=>asyncCreateUser(用户))
结果
- 经过身份验证的用户可以
集合存在问题:集合中只有三个用户。添加到用户
集合的用户数在不同的执行中可能会有所不同user
user.email
和createdUser
是不同的
需要帮助
我想知道如何修理它。如果可能的话,我也想知道原因。谢谢大家! 我自己解决了。似乎map中的
async
调用出错了
self = this
for (let i = 0; i < 5; i++) {
const self = this
await auth.createUserWithEmailAndPassword(data[i].email, 'password')
.then(function (res) {
const ref = usersRef.doc(res.user.uid)
self.data[i]._id = res.user.uid
ref.set(self.data[i])
}
)
}
self=this
for(设i=0;i<5;i++){
const self=this
等待auth.createUserWithEmailAndPassword(数据[i]。电子邮件“password”)
.然后(功能(res){
const ref=usersRef.doc(res.user.uid)
self.data[i]。\u id=res.user.uid
参考集(自身数据[i])
}
)
}
只是猜测-您使用的是javascript SDK来创建用户,而不是管理员SDK
Javascript SDK会在创建帐户后让用户登录,因此基本上你会连续5次快速登录和注销一个新帐户,因此在创建firestore文档时会与用户ID混淆-可能是你当时刚刚注销:
如果创建了新帐户,则用户将自动登录。
请查看下面的“下一步”部分,以获取登录用户
细节
如果您想批量创建用户帐户,最好在安全环境(例如)中使用AdminSDK,只需从前端触发https功能。您现在的做法意味着所有帐户都将按顺序创建,这在您一次创建大量帐户时可能会非常耗时-如果您使用云功能和admin sdk,您可以并行启动所有帐户的创建,并在所有帐户完成后返回承诺-大致如下:
return Promise.all(users.map(user => admin.auth().createUser(user)
.then(function(userRecord) {
return admin.firestore().collection('users').doc(userRecord.uid).set(...);
})
})
return Promise.all(users.map(user => admin.auth().createUser(user)
.then(function(userRecord) {
return admin.firestore().collection('users').doc(userRecord.uid).set(...);
})
})