Guia de migração do SDK Admin para autenticação

As seguintes versões de SDKs Admin apresentam alterações interruptivas no suporte à autenticação:

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

Migre o código de autenticação existente para as novas versões usando as instruções deste guia.

SDK Admin para Java (5.0.0)

Usar setCredential() em FirebaseOptions.Builder

O método obsoleto FirebaseOptions.Builder.setServiceAccount() foi removido. Se o app usa esse método, atualize-o para usar o método setCredential().

Antes

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

Depois

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

Observe também que chamar Builder.setCredential() ao criar uma instância FirebaseOptions agora é obrigatório. Chamar Builder.build() sem especificar uma credencial resulta em uma exceção de execução.

Processar erros lançados pelos métodos de fábrica em FirebaseCredentials

Os seguintes métodos de fábrica na classe FirebaseCredentials agora podem gerar IOExceptions:

  • fromCertificate()
  • fromRefreshToken()

Modifique seu código para processá-las.

Antes

FirebaseCredential credential = FirebaseCredentials.fromCertificate(stream);

Depois

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

Atualizar implementações personalizadas de FirebaseCredential

A interface FirebaseCredential foi modificada da seguinte forma:

Antes

Task<String> getAccessToken(boolean forceRefresh);

Depois

Task<GoogleOAuthAccessToken> getAccessToken();

GoogleOAuthAccessToken é um novo tipo público que encapsula o token de acesso (String) e o expiry time (long) retornados em um objeto. Usuários que fornecem implementações personalizadas dessa interface devem implementar o novo método.

SDK Admin para Node (5.0.0)

Usar a propriedade credential em admin.app.AppOptions

A propriedade obsoleta serviceAccount foi removida. Se seu app usa essa propriedade, atualize-o para usar a propriedade credential.

Antes

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

Depois

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

Agora é obrigatório definir a propriedade credential ao inicializar um app. Chamar initializeApp sem especificar uma credencial resulta em uma exceção.

Atualizar referências para admin.auth.UserMetadata

As propriedades na classe UserMetadata foram alteradas da seguinte maneira:

  • createdAt agora é creationTime
  • lastSignedInAt agora é 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);
  });

Depois

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 Admin para Python (2.0.0)

Dependência de oauth2client substituída por google-auth

O SDK Admin para Python do Firebase não depende mais da biblioteca oauth2client. Agora o SDK usa a nova biblioteca google-auth.

verify_id_token() gera ValueErrors

Se você tiver um código que processa explicitamente tipos de exceção específicos gerados pela função verify_id_token(), atualize seu código conforme mostrado abaixo.

Antes

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

Depois

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

Se o código não detecta exceções nem captura o tipo de base Exception do Python, não é necessário fazer alterações.