Guía de migración del SDK de Admin para Auth

Las versiones siguientes de los SDK de Admin introducen cambios en la compatibilidad con la autenticación:

  • Java SDK 5.0.0
  • Node SDK 5.0.0
  • Python SDK 2.0.0

Sigue las instrucciones que se incluyen en esta guía para migrar el código de autenticación existente a las nuevas versiones.

SDK de Admin para Java (5.0.0)

Utiliza setCredential() en FirebaseOptions.Builder.

Se quitó el método obsoleto FirebaseOptions.Builder.setServiceAccount(). Si tu app utiliza este método, actualízala para que use el método setCredential() en su lugar.

Antes

FirebaseOptions options = new FirebaseOptions.Builder()
    .setServiceAccount(getCredentialAsStream())
    .build();

Después

FirebaseOptions options = new FirebaseOptions.Builder()
    .setCredential(FirebaseCredentials.fromCertificate(getCredentialAsStream()))
    .build();

Además, ten en cuenta que ahora es obligatorio llamar a Builder.setCredential() cuando creas una instancia FirebaseOptions. Si llamas a Builder.build() sin especificar una credencial, el resultado será una excepción de tiempo de ejecución.

Soluciona errores generados por métodos de fábrica en FirebaseCredentials

Los siguientes métodos de fábrica en la clase FirebaseCredentials ahora pueden generar IOExceptions:

  • fromCertificate()
  • fromRefreshToken()

Modifica tu código para solucionarlos.

Antes

FirebaseCredential credential = FirebaseCredentials.fromCertificate(stream);

Después

try {
    FirebaseCredential credential = FirebaseCredentials.fromCertificate(stream);
} catch (IOException e) {
    // handle error
    log.error("Failed to load Firebase credential", e);
}

Actualiza implementaciones personalizadas de FirebaseCredential

Se modificó la interfaz FirebaseCredential de la siguiente manera:

Antes

Task<String> getAccessToken(boolean forceRefresh);

Después

Task<GoogleOAuthAccessToken> getAccessToken();

GoogleOAuthAccessToken es un tipo de público nuevo que encapsula al token de acceso (String) y su hora de vencimiento (long), que se muestra en un objeto. Los usuarios que proporcionan implementaciones personalizadas de esta interfaz deben implementar el nuevo método.

SDK de Admin para Node (5.0.0)

Usa la propiedad credential en admin.app.AppOptions

Se quitó la propiedad obsoleta serviceAccount. Si tu app usa esta propiedad, actualízala para que use la propiedad credential en su lugar.

Antes

admin.initializeApp({
    serviceAccount: 'path/to/key.json'
});

Después

var key = require("path/to/serviceAccountKey.json");
admin.initializeApp({
    credential: admin.credential.cert(key)
});

Ten en cuenta que ahora es obligatorio configurar la propiedad credential cuando se inicializa una app. Si llamas a initializeApp sin especificar una credencial, el resultado será una excepción.

Actualiza las referencias a admin.auth.UserMetadata

Las propiedades de la clase UserMetadata se modificaron de la siguiente manera:

  • createdAt es ahora creationTime
  • lastSignedInAt es ahora lastSignInTime

Antes

admin.auth().getUser(uid)
  .then(function(userRecord) {
    var createdAt = userRecord.metadata.createdAt; // Date
    var lastSignedInAt = userRecord.metadata.lastSignedInAt // Date
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

Después

admin.auth().getUser(uid)
  .then(function(userRecord) {
    var createdAt = userRecord.metadata.creationTime; // UTC string
    var lastSignedInAt = userRecord.metadata.lastSignInTime // UTC string
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

SDK de Admin Python (2.0.0)

La dependencia de oauth2client se reemplazó por google-auth

El SDK de Firebase Admin para Python ya no depende de la biblioteca oauth2client. En su lugar, el SDK ahora utiliza la nueva biblioteca google-auth.

verify_id_token() genera ValueErrors

Si tienes código que maneja de forma explícita los tipos de excepción específicos generados por la función verify_id_token(), actualiza tu código como se muestra a continuación.

Antes

try:
  claims = auth.verify_id_token(token)
except oauth2client.crypt.AppIdentityError:
  handle_error()

Después

try:
  claims = auth.verify_id_token(token)
except ValueError:
  handle_error()

Si tu código no detecta excepciones ni captura el tipo base Exception de Python, no es necesario realizar cambios.