Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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 如何为firebase导入程序准备用户密码?_Javascript_Firebase_Firebase Authentication_Firebase Admin - Fatal编程技术网

Javascript 如何为firebase导入程序准备用户密码?

Javascript 如何为firebase导入程序准备用户密码?,javascript,firebase,firebase-authentication,firebase-admin,Javascript,Firebase,Firebase Authentication,Firebase Admin,我有一个很大的json文件,上面有我以前的所有用户。我需要准备进口。我一直收到以下错误:错误4导入失败:FirebaseAuthError:密码哈希必须是有效的字节缓冲区 在json中将哈希密码存储为字节缓冲区的正确方法是什么 var jsonFile = require('./users.json'); var fs = require('fs') let newArr = [] jsonFile.file.slice(0, 5).map( val => { newArr.p

我有一个很大的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('$2a$10$P6TOqRVAXL2FLRzq9Ii6AeGqzV4mX8UNdpHvlLr.4DPxq2Xsd54KK')
    }
];

admin.auth().importUsers(jsonFile, {
  hash: {
    algorithm: 'BCRYPT',
    rounds: 10
  }
})

第一个代码段将
缓冲区
值写入文件系统。这不是你期望的那样。例如,请尝试运行以下示例:

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()
的正确类型的数组。但是将其写入文件系统,然后重新加载它会更改所有
缓冲区
字段的类型。

我找到了解决此问题的方法。我直接在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
  }
})

Firebase在2020年使用MD5对密码进行哈希?您正在使用Bcrypt,这是您应该做的。MD5是如何考虑的?我的旧密码是用bcrypt第10轮编码的。md5不重要,抱歉。我应该说:哈希密码你确定
val.password
存在吗?值得测试
val
中的内容,或者给我们展示一个示例。它在结构上可能与第二个示例有所不同。是的,它正好包含$2a$10$P6TOqRVAXL2FLRzq9Ii6AeGqzV4mX8UNdpHvlLr.4dpxq2xsd54kk从json文件导入带有密码哈希的用户的正确方法是什么?