Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Admim SDK für Python 3.0.0-Migrationsleitfaden

Version 3.0.0 des Firebase Admin SDK für Python führt einige wichtige Änderungen in der API ein. Die API-Änderungen in dieser Version sind in erster Linie Ergänzungen und Verbesserungen der Fehlerbehandlung für Auth, FCM und andere Firebase-Funktionen.

Allgemeine Änderungen bei der Fehlerbehandlung

Die folgenden Ausnahmetypen wurden entfernt:

  • auth.AuthError
  • db.ApiCallError
  • instance_id.ApiCallError
  • messaging.ApiCallError
  • project_management.ApiCallError

Stattdessen wird ein neues firebase_admin.exceptions hat Modul eingeführt. Öffentliche APIs in auth , db , instance_id , messaging und project_management Module jetzt Instanzen erhöhen exceptions.FirebaseError Typs.

# Before
from firebase_admin import messaging

try:
    messaging.send(build_message())
except messaging.ApiCallError as ex:
    print('Error message:', ex)

# v3
from firebase_admin import exceptions
from firebase_admin import messaging

try:
    messaging.send(build_message())
except exceptions.FirebaseError as ex:
    print('Error message:', ex)
    print('Error code:', ex.code) # Platform-wide error code
    print('HTTP response:', ex.http_response) # requests HTTP response object

Der exceptions.FirebaseError Typ hat viele Subtypen. Öffentliche APIs im Admin SDK können nur diese Untertypen auslösen. Daher können Sie Code schreiben, der einen bestimmten Untertyp abfängt und Fehler detaillierter behandelt. Zum Beispiel:

try:
    messaging.send(build_message())
except exceptions.InvalidArgumentError as ex:
    print(ex) # One or more arguments were invalid
except exceptions.UnavailableError as ex:
    print(ex) # FCM service is temporarily down
except exceptions.FirebaseError as ex:
    print(ex) # All other errors

Stattdessen bestimmte Fehlertypen zu kontrollieren, ist es auch möglich , die Eltern zu fangen FirebaseError Art und vergleichen Fehlercodes.

try:
    messaging.send(build_message())
except exceptions.FirebaseError as ex:
    if ex.code == exceptions.INVALID_ARGUMENT:
        print(ex) # One or more arguments were invalid
    elif ex.code == exceptions.UNAVAILABLE:
        print(ex) # FCM service is temporarily down
    else:
        print(ex) # All other errors

Jedes Modul zusätzliche Subtypen erklären kann von der Erstreckungs exceptions.FirebaseError Muttertyp (siehe unten).

Allgemeine Richtlinien für die Fehlerbehandlung: Catch exceptions.FirebaseError wenn Sie nicht brauchen zwischen Fehlerzuständen zu unterscheiden. Suchen Sie nach einer spezifischeren Fehlerunterklasse oder einem Fehlercode, wenn Sie Fehlerbedingungen unterscheiden müssen.

Änderungen bei der Behandlung von Authentifizierungsfehlern

JWT-Verifizierung

Die auth.verify_id_token() Methode nicht mehr erhöht ValueError Token Validierungsfehler anzuzeigen. Stattdessen erhalten Sie einen der folgenden Fehlertypen:

  • InvalidIdTokenError
  • ExpiredIdTokenError
  • RevokedIdTokenError

Die InvalidIdTokenError Typ erweitert die exceptions.InvalidArgumentError - Typ, der in den Windungen erstreckt exceptions.FirebaseError Typ. ExpiredIdTokenError und RevokedIdTokenError verlängern InvalidIdTokenError .

# Before
from firebase_admin import auth

try:
    auth.verify_id_token(id_token, check_revoked=True)
except ValueError as ex:
    print('Error message:', ex)

 # v3
from firebase_admin import auth

# Coarse-grained error handling
try:
    auth.verify_id_token(id_token, check_revoked=True)
except auth.InvalidIdTokenError as ex:
    print('ID token is invalid, expired or revoked')

# Fine-grained error handling
try:
    auth.verify_id_token(id_token, check_revoked=True)
except auth.RevokedIdTokenError as ex:
    print('ID token has been revoked')
except auth.ExpiredIdTokenError as ex:
    print('ID token is expired')
except auth.InvalidIdTokenError as ex:
    print('ID token is invalid')

Ähnlich ist die auth.verify_session_cookie() stellt das Verfahren die folgenden Ausnahmetypen:

  • InvalidSessionCookieError
  • ExpiredSessionCookieError
  • RevokedSessionCookieError

Klassenhierarchie und die Semantik sind ähnlich dem verify_id_token() API.

Benutzerdefinierte Token

Die create_custom_token() API stellt auth.TokenSignError statt ValueError Ausfälle anzuzeigen.

# Before
from firebase_admin import auth

try:
    auth.create_custom_token(uid)
except ValueError as ex:
    print('Error message:', ex)

 # v3
from firebase_admin import auth

try:
    auth.create_custom_token(uid)
except auth.TokenSignError as ex:
    print('Error message:', ex)

Benutzerverwaltung

Die folgenden neuen Fehlertypen wurden das eingeführte auth - Modul:

  • EmailAlreadyExistsError
  • InvalidDynamicLinkDomainError
  • PhoneNumberAlreadyExistsError
  • UidAlreadyExistsError
  • UnexpectedResponseError
  • UserNotFoundError
# Before
from firebase_admin import auth

try:
    auth.get_user(uid)
except auth.AuthError as ex:
    if ex.code == auth.USER_NOT_FOUND_ERROR:
        print('Specified user does not exist')
    else:
        print('Something else went wrong')

 # v3
from firebase_admin import auth
from firebase_admin import exceptions

try:
    auth.get_user(uid)
except auth.UserNotFoundError as ex:
    print('Specified user does not exist')
except exceptions.FirebaseError as ex:
    print('Something else went wrong')

Änderungen bei der Behandlung von FCM-Fehlern

Die folgenden neuen Fehlertypen wurden das eingeführte messaging - Modul.

  • QuotaExceededError
  • SenderIdMismatchError
  • ThirdPartyAuthError
  • UnregisteredError
# Before
from firebase_admin import messaging

try:
    messaging.send(msg)
except messaging.ApiCallError as ex:
    if ex.code == 'registration-token-not-registered':
        print('Registration token has been unregistered')
    elif ex.code == 'invalid-argument':
        print('One or more arguments invalid')
    else:
        print('Something else went wrong')

# v3
from firebase_admin import exceptions
from firebase_admin import messaging

try:
    messaging.send(msg)
except messaging.UnregisteredError as ex:
    print('Registration token has been unregistered')
except exceptions.InvalidArgumentError as ex:
    print('One or more arguments invalid')
except exceptions.FirebaseError as ex:
    print('Something else went wrong')

Löschen der Benutzereigenschaft

Es ist nicht mehr möglich , Eigenschaften zu löschen display_name , photo_url , phone_number und custom_claims von ihnen Einstellung None . Setzen diese None Blätter diese Eigenschaften unverändert. Sie müssen explizit festgelegt werden auth.DELETE_ATTRIBUTE sie zu löschen.

# Before
from firebase_admin import auth

auth.update_user(uid, display_name=None, photo_url=None)

 # v3
from firebase_admin import auth

auth.update_user(
  uid, display_name=auth.DELETE_ATTRIBUTE, photo_url=auth.DELETE_ATTRIBUTE)