Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在Firestore中将数据正确添加到自定义用户集合 问题_Javascript_Reactjs_Firebase_Vue.js_Google Cloud Firestore - Fatal编程技术网

Javascript 无法在Firestore中将数据正确添加到自定义用户集合 问题

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”}, {电子邮件:“

我想将几个用户数据添加到firestore Authenticateced用户列表和我自己同时创建的
用户
集合中,但这并不顺利<代码>用户集合仅更新其一部分

资料
//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(...);
  })
})