auth:import y auth:export

  • El comando auth:import permite importar cuentas de usuario a proyectos de Firebase.

  • El comando auth:export exporta cuentas de usuario a archivos JSON y CSV.

Parámetros de hash de contraseña

Para determinar los parámetros de hash de contraseña que se usaron en tu proyecto, ve a la sección Autenticación > Usuarios de Firebase console y haz clic en el ícono de tres puntos sobre la lista de usuarios. Verás un diálogo con una lista de parámetros de hash de contraseña que puedes usar con los comandos auth:import y auth:export:

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

Almacena estos valores con cuidado, ya que son sensibles. La mayoría de los proyectos de Firebase usan SCRYPT, una versión modificada del algoritmo de hash de scrypt, que es la configuración predeterminada para proyectos nuevos.

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
Parámetros
account_file El archivo CSV o JSON que contiene las cuentas de usuario que se importarán. Consulta Formato de archivo.
hash-algo El algoritmo que se usa a fin de generar un hash para las contraseñas en el archivo de la cuenta de usuario.
Es obligatorio para importar cuentas con campos de contraseña. Corresponde a uno de los siguientes valores: BCRYPT, SCRYPT, STANDARD_SCRYPT, HMAC_SHA512, HMAC_SHA256, HMAC_SHA1, HMAC_MD5, MD5, SHA512, SHA256, SHA1, PBKDF_SHA1, PBKDF2_SHA256.
hash-key La clave que se usa a fin de generar hash para las contraseñas.
Es obligatoria para los algoritmos SCRYPT, HMAC_SHA512, HMAC_SHA256, HMAC_SHA1 y HMAC_MD5. Este argumento debe tener el formato de una string codificada en base 64.
salt-separator El separador de sal que se agregará a la sal cuando se verifique la contraseña.
Es opcional para todos los algoritmos. Este argumento debe tener el formato de una string codificada en base 64.
rounds La cantidad de rondas que se usan a fin de generar hash para las contraseñas.
Es obligatorio para los algoritmos SCRYPT, MD5, SHA512, SHA256, SHA1, PBKDF_SHA1 y PBKDF2_SHA256.
mem-cost Este parámetro representa el costo de memoria obligatorio para el algoritmo SCRYPT, O el costo de CPU o memoria obligatorio para el algoritmo STANDARD_SCRYPT.
parallelization La paralelización del algoritmo de hash.
Obligatorio para el algoritmo STANDARD_SCRYPT.
block-size El tamaño de bloque (normalmente es 8) del algoritmo de hash.
Obligatorio para el algoritmo STANDARD_SCRYPT.
dk-len La longitud de clave derivada del algoritmo de hash.
Obligatorio para el algoritmo STANDARD_SCRYPT.
hash-input-order El orden de la contraseña y la sal.
Los valores posibles son SALT_FIRST y PASSWORD_FIRST. Esta marca se aplica a SHA512, SHA256, SHA1, MD5, HMAC_SHA512, HMAC_SHA256, HMAC_SHA1 y HMAC_MD5.

auth:export

firebase auth:export ACCOUNT_FILE --format=FILE_FORMAT
Parámetros
account_file El archivo CSV o JSON al que se realizará la exportación. Consulta Formato de archivo.
file_format Opcional. El formato del archivo que se exportará puede ser CSV o JSON.
Si el nombre de archivo especificado en el parámetro account_file termina con .csv o .json, se usa ese formato y se ignora este parámetro.

Formato de archivo

El archivo de la cuenta de usuario puede tener el formato CSV o JSON.

CSV

Un archivo de cuenta de usuario CSV tiene el siguiente formato:

Número de columna Descripción del campo Tipo de campo Comentarios
1 UID String Obligatorio
Este ID debe ser único entre todas las cuentas en tus proyectos de Firebase. Si importas una cuenta con un UID que ya existe, la cuenta se reemplazará.
2 Correo electrónico String Opcional
3 Correo electrónico verificado Booleano Opcional
4 Hash de contraseña String Opcional
Una string codificada en base 64. Este campo requiere que el llamador tenga la función de editor o propietario.
5 Sal de contraseña String Opcional
Una string codificada en base 64. Este campo requiere que el llamador tenga la función de editor o propietario.
6 Nombre String Opcional
7 URL de foto String Opcional
8 ID de Google String Opcional
9 Correo electrónico de Google String Opcional
10 Nombre visible de Google String Opcional
11 URL de foto de Google String Opcional
12 ID de Facebook String Opcional
13 Correo electrónico de Facebook String Opcional
14 Nombre visible de Facebook String Opcional
15 URL de foto de Facebook String Opcional
16 ID de Twitter String Opcional
17 Correo electrónico de Twitter String Opcional
18 Nombre visible de Twitter String Opcional
19 URL de foto de Twitter String Opcional
20 ID de GitHub String Opcional
21 Correo electrónico de GitHub String Opcional
22 Nombre visible de GitHub String Opcional
23 URL de foto de GitHub String Opcional
24 Momento de creación del usuario Long Opcional
Marca de tiempo Epoch Unix en milisegundos.
25 Momento del último acceso Long Opcional
Marca de tiempo Epoch Unix en milisegundos.
26 Número de teléfono String Opcional

Incluso si no especificas un valor opcional, asegúrate de incluir un campo vacío para ese valor. Un campo vacío puede ser una cantidad arbitraria de espacios.

Por ejemplo, la siguiente línea representa una cuenta de usuario:

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

Un archivo de cuenta de usuario JSON tiene el siguiente formato:

{
  "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
        },
        ...
      ]
    },
    ...
  ]
}

Reemplaza PROVIDER_ID por uno de los siguientes valores:

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