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.comfacebook.comgithub.comtwitter.com