问题描述
我所有以前的用户都有一个很大的json文件。我需要准备将它们导入。我不断收到此错误:错误4导入失败:FirebaseAuthError:密码哈希必须是有效的字节缓冲区。
>cleantrain %>% filter(Title == "Master" & is.na(age)) %>% mutate(age = 8) #will put the right info on the right place.
train$PassengerId survived Title fare sbsp parch alone familysize age
1 66 1 Master 15.2458 1 1 0 3 8
2 160 0 Master 69.5500 8 2 0 11 8
3 177 0 Master 25.4667 3 1 0 5 8
4 710 1 Master 15.2458 1 1 0 3 8
#but not actually. when checking dataframe values remains NAS
>cleantrain %>% filter(Title == "Master" & is.na(age))
train$PassengerId survived Title fare sbsp parch alone familysize age
1 66 1 Master 15.2458 1 1 0 3 NA
2 160 0 Master 69.5500 8 2 0 11 NA
3 177 0 Master 25.4667 3 1 0 5 NA
4 710 1 Master 15.2458 1 1 0 3 NA
在我的主要导入文件中
var jsonFile = require('./users.json');
var fs = require('fs')
let newArr = []
jsonFile.file.slice(0,5).map( val => {
newArr.push({
uid: val.id,email: val.email,passwordHash: Buffer.from(val.password) // val.password is hashed
})
})
let data = JSON.stringify(newArr);
fs.writeFileSync('newArr.json',data);
解决方法
您的第一个代码段将Buffer
值写入文件系统。这不符合您的期望。例如,尝试运行以下示例:
const val = {uid: 'test',passwordHash: Buffer.from('test')};
fs.writeFileSync('newArr.json',JSON.stringify(val));
结果文件将包含以下文本:
{"uid":"test","passwordHash":{"type":"Buffer","data":[116,101,115,116]}}
当您require()
使用此文件时,passwordHash
被分配给对象{ type: 'Buffer',data: [ 116,116 ] }
。这不是Buffer
API期望的importUsers()
类型。
我相信您的newArr
变量包含可以传递给importUsers()
的正确类型的数组。但是将其写入文件系统,然后重新加载它会更改所有Buffer
字段的类型。
我找到了解决此问题的方法。我直接在importUsers()文件中解析users.json。由于我不必再次将Buffer存储在json文件中,因此passwordHash保留为缓冲区。
这是正确的方法
let newArr = []
jsonFile.file.slice(0,5).map( val => {
newArr.push({
uid: val.id,email: val.email,passwordHash: Buffer.from(val.password)
})
})
admin.auth().importUsers(newArr,{
hash: {
algorithm: 'BCRYPT',rounds: 10
}
})