繁体   English   中英

如何为 firebase importUsers 准备用户密码?

[英]How to prepare users password for firebase importUsers?

我有一个大型 json 文件,其中包含我以前的所有用户。 我需要准备它们以进行导入。 我不断收到此错误:错误 4 导入失败:FirebaseAuthError:密码 hash 必须是有效的字节缓冲区。

将散列密码作为字节缓冲区存储在 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('$2a$10$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被分配给 object { type: 'Buffer', data: [ 116, 101, 115, 116 ] } 这不是importUsers() API 所期望的Buffer类型。

我相信您的newArr变量包含可以传递给importUsers()的正确类型的数组。 但是将其写入文件系统,然后重新加载它会更改所有Buffer字段的类型。

我找到了解决这个问题的方法。 我正在解析 users.json 直接在 importUsers() 文件中。 由于我不必再次将缓冲区存储在 json 文件中,因此密码哈希保持在缓冲区中。

这是正确的方法

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
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM