如何为 firebase importUsers 准备用户密码?
How to prepare users password for firebase importUsers?
我有一个很大的 json 文件,其中包含我以前的所有用户。我需要准备将它们导入。我不断收到此错误:错误 4 导入失败:FirebaseAuthError:密码哈希必须是有效的字节缓冲区。
将散列密码作为字节缓冲区存储在 json 中的正确方法是什么?
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);
在我的主要导入文件中
var jsonFile = require('./newArr.json');
// I was testing it like that and everything is working fine.
const userImportRecords = [
{
uid: '555555555555',
email: 'user@example.com',
passwordHash: Buffer.from('a$P6TOqRVAXL2FLRzq9Ii6AeGqzV4mX8UNdpHvlLr.4DPxq2Xsd54KK')
}
];
admin.auth().importUsers(jsonFile, {
hash: {
algorithm: 'BCRYPT',
rounds: 10
}
})
您的第一个代码片段将 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, 101, 115, 116 ] }
。这不是 importUsers()
API.
期望的 Buffer
类型
我相信您的 newArr
变量包含可以传递给 importUsers()
的正确类型的数组。但是将它写入文件系统,然后重新加载它会更改所有 Buffer
字段的类型。
我找到了解决此问题的方法。我直接在 importUsers() 文件中解析 users.json。由于我不必再次将缓冲区存储在 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
}
})
我有一个很大的 json 文件,其中包含我以前的所有用户。我需要准备将它们导入。我不断收到此错误:错误 4 导入失败:FirebaseAuthError:密码哈希必须是有效的字节缓冲区。
将散列密码作为字节缓冲区存储在 json 中的正确方法是什么?
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);
在我的主要导入文件中
var jsonFile = require('./newArr.json');
// I was testing it like that and everything is working fine.
const userImportRecords = [
{
uid: '555555555555',
email: 'user@example.com',
passwordHash: Buffer.from('a$P6TOqRVAXL2FLRzq9Ii6AeGqzV4mX8UNdpHvlLr.4DPxq2Xsd54KK')
}
];
admin.auth().importUsers(jsonFile, {
hash: {
algorithm: 'BCRYPT',
rounds: 10
}
})
您的第一个代码片段将 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, 101, 115, 116 ] }
。这不是 importUsers()
API.
Buffer
类型
我相信您的 newArr
变量包含可以传递给 importUsers()
的正确类型的数组。但是将它写入文件系统,然后重新加载它会更改所有 Buffer
字段的类型。
我找到了解决此问题的方法。我直接在 importUsers() 文件中解析 users.json。由于我不必再次将缓冲区存储在 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
}
})