- auth:import命令可将用户账号导入至 Firebase 项目。
- auth:export命令可将用户账号导出至 JSON 和 CSV 文件。
密码哈希参数
要确定项目使用的密码哈希参数,请前往 Firebase 控制台的 Authentication > 用户部分,然后点击用户列表上方的三点状图标。您将看到一个对话框,其中列出了可与 auth:import 和 auth: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 | 用于在用户账号文件中对密码进行哈希处理的算法。 导入含密码字段的账号时的必需参数。值为 BCRYPT、SCRYPT、STANDARD_SCRYPT、HMAC_SHA512、HMAC_SHA256、HMAC_SHA1、HMAC_MD5、MD5、SHA512、SHA256、SHA1、PBKDF_SHA1或PBKDF2_SHA256。 | 
| hash-key | 用于对密码进行哈希处理的密钥。 SCRYPT、HMAC_SHA512、HMAC_SHA256、HMAC_SHA1和HMAC_MD5算法的必需参数。此参数的格式必须是使用 base64 编码的字符串。 | 
| salt-separator | 验证密码时将会附加到盐值的加盐分隔符。 所有算法的可选参数。此参数的格式必须是使用 base64 编码的字符串。 | 
| rounds | 用于对密码进行哈希处理的轮数。 SCRYPT、MD5、SHA512、SHA256、SHA1、PBKDF_SHA1和PBKDF2_SHA256算法的必需参数。 | 
| mem-cost | 此参数表示 SCRYPT算法所需的内存消耗,或STANDARD_SCRYPT算法所需的 CPU/内存消耗。 | 
| parallelization | 哈希算法的并行化。 STANDARD_SCRYPT算法的必需参数。 | 
| block-size | 哈希算法的块大小(通常为 8)。 STANDARD_SCRYPT算法的必需参数。 | 
| dk-len | 哈希算法的派生密钥长度。 STANDARD_SCRYPT算法的必需参数。 | 
| hash-input-order | 密码和盐的顺序。 可能的值包括 SALT_FIRST和PASSWORD_FIRST。该标志适用于SHA512、SHA256、SHA1、MD5、HMAC_SHA512、HMAC_SHA256、HMAC_SHA1和HMAC_MD5。 | 
auth:export
firebase auth:export ACCOUNT_FILE --format=FILE_FORMAT
| 参数 | |
|---|---|
| account_file | 要导出的 CSV 或 JSON 文件。请参阅文件格式。 | 
| file_format | 可选。要导出的文件格式:CSV 或 JSON。 如果 account_file参数中指定的文件名以.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