auth:import 和 auth:export

  • auth:import 命令可将用户账号导入至 Firebase 项目。

  • auth:export 命令可将用户账号导出至 JSON 和 CSV 文件。

密码哈希参数

要确定项目使用的密码哈希参数,请前往 Firebase 控制台的 Authentication > 用户部分,然后点击用户列表上方的三点状图标。您将看到一个对话框,其中列出了可与 auth:importauth:export 命令搭配使用的密码哈希参数:

hash_config {
  algorithm: SCRYPT,
  base64_signer_key: <...sensitive...>,
  base64_salt_separator: <...sensitive...>,
  rounds: 8,
  mem_cost: 14,
}

这些是敏感值,请妥善保管。大多数 Firebase 项目都使用 SCRYPT(即修订版 SCRYPT 哈希算法),这是新项目的默认参数。

auth:import

firebase auth:import ACCOUNT_FILE    \
    --hash-algo=HASH_ALGORITHM         \
    --hash-key=KEY                     \
    --salt-separator=SALT_SEPARATOR    \
    --rounds=ROUNDS                    \
    --mem-cost=MEM_COST                \
    --parallelization=PARALLELIZATION  \
    --block-size=BLOCK_SIZE            \
    --dk-len=DK_LEN                    \
    --hash-input-order=HASH_INPUT_ORDER
参数
account_file 包含要导入的用户账号的 CSV 或 JSON 文件。请参阅文件格式
hash-algo 用于在用户账号文件中对密码进行哈希处理的算法。
导入含密码字段的账号时的必需参数。值为 BCRYPTSCRYPTSTANDARD_SCRYPTHMAC_SHA512HMAC_SHA256HMAC_SHA1HMAC_MD5MD5SHA512SHA256SHA1PBKDF_SHA1PBKDF2_SHA256
hash-key 用于对密码进行哈希处理的密钥。
SCRYPTHMAC_SHA512HMAC_SHA256HMAC_SHA1HMAC_MD5 算法的必需参数。此参数的格式必须是使用 base64 编码的字符串。
salt-separator 验证密码时将会附加到盐值的加盐分隔符。
所有算法的可选参数。此参数的格式必须是使用 base64 编码的字符串。
rounds 用于对密码进行哈希处理的轮数。
SCRYPTMD5SHA512SHA256SHA1PBKDF_SHA1PBKDF2_SHA256 算法的必需参数。
mem-cost 此参数表示 SCRYPT 算法所需的内存消耗,或 STANDARD_SCRYPT 算法所需的 CPU/内存消耗。
parallelization 哈希算法的并行化。
STANDARD_SCRYPT 算法的必需参数。
block-size 哈希算法的块大小(通常为 8)。
STANDARD_SCRYPT 算法的必需参数。
dk-len 哈希算法的派生密钥长度。
STANDARD_SCRYPT 算法的必需参数。
hash-input-order 密码和盐的顺序。
可能的值包括 SALT_FIRSTPASSWORD_FIRST。该标志适用于 SHA512SHA256SHA1MD5HMAC_SHA512HMAC_SHA256HMAC_SHA1HMAC_MD5

auth:export

firebase auth:export ACCOUNT_FILE --format=FILE_FORMAT
参数
account_file 要导出的 CSV 或 JSON 文件。请参阅文件格式
file_format 可选。要导出的文件格式:CSV 或 JSON。
如果 account_file 参数中指定的文件名以 .csv.json 结尾,则使用该格式,并忽略此参数。

文件格式

用户账号文件的格式可以是 CSV,也可以是 JSON

CSV

CSV 用户账号文件的格式如下:

列号 字段说明 字段类型 备注
1 UID 字符串 必需
此 ID 应在您 Firebase 项目的所有账号中都是唯一的。如果您导入一个 UID 已存在的账号,那么该账号会被覆盖。
2 电子邮件 字符串 可选
3 已验证电子邮件地址 布尔值 可选
4 密码哈希 字符串 可选
使用 base64 编码的字符串。此字段要求调用者具有 Editor 或 Owner 角色
5 密码加密盐 字符串 可选
使用 base64 编码的字符串。此字段要求调用者具有 Editor 或 Owner 角色
6 名称 字符串 可选
7 照片网址 字符串 可选
8 Google ID 字符串 可选
9 Google 电子邮件地址 字符串 可选
10 Google 显示名 字符串 可选
11 Google 相册网址 字符串 可选
12 Facebook ID 字符串 可选
13 Facebook 电子邮件地址 字符串 可选
14 Facebook 显示名 字符串 可选
15 Facebook 照片网址 字符串 可选
16 Twitter ID 字符串 可选
17 Twitter 电子邮件地址 字符串 可选
18 Twitter 显示名 字符串 可选
19 Twitter 照片网址 字符串 可选
20 GitHub ID 字符串 可选
21 GitHub 电子邮件地址 字符串 可选
22 GitHub 显示名 字符串 可选
23 GitHub 照片网址 字符串 可选
24 用户创建时间 可选
以毫秒表示的计时原点 Unix 时间戳。
25 上次登录时间 可选
以毫秒表示的计时原点 Unix 时间戳。
26 电话号码 字符串 可选

如果您未指定某个可选值,请确保仍为该值添加了空字段。空字段可以是任意数量的空格字符。

例如,下面这行代表一个用户账号:

111, test@test.org, false, Jlf7onfLbzqPNFP/1pqhx6fQF/w=, c2FsdC0x, Test User, http://photo.com/123, , , , , 123, test@test.org, Test FB User, http://photo.com/456, , , , , , , , , 1486324027000, 1486324027000

JSON

JSON 用户账号文件的格式如下:

{
  "users": [
    {
      "localId": UID,
      "email": EMAIL_ADDRESS
      "emailVerified": EMAIL_VERIFIED,
      "passwordHash": BASE64_ENCODED_PASSWORD_HASH,
      "salt": BASE64_ENCODED_PASSWORD_SALT,
      "displayName": NAME,
      "photoUrl": PHOTO_URL,
      "createdAt": CREATED_AT_IN_MILLIS,
      "lastSignedInAt": LAST_SIGNEDIN_AT_IN_MILLIS,
      "phoneNumber": PHONE_NUMBER
      "providerUserInfo": [
        {
          "providerId": PROVIDER_ID,
          "rawId": PROVIDER_UID,
          "email":  PROVIDER_EMAIL,
          "displayName": PROVIDER_NAME,
          "photoUrl": PROVIDER_PHOTO_URL
        },
        ...
      ]
    },
    ...
  ]
}

PROVIDER_ID 替换为以下某个值:

  • google.com
  • facebook.com
  • github.com
  • twitter.com