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

问题描述

我所有以前的用户都有一个很大的json文件。我需要准备将它们导入。我不断收到此错误错误4导入失败:FirebaseAuthError:密码哈希必须是有效的字节缓冲区。

将散列密码存储为json中的字节缓冲区的正确方法是什么?

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...