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 ahoracreationTime
lastSignedInAt
es ahoralastSignInTime
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.