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 for Python3.0.0移行ガイド

Python用FirebaseAdmin SDKのバージョン3.0.0では、APIにいくつかの重要な変更が導入されています。主に、このリリースでのAPIの変更は、Auth、FCM、その他のFirebase機能のエラー処理の追加と改善です。

一般的なエラー処理の変更

次の例外タイプが削除されました。

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

代わりに、新しいfirebase_admin.exceptionsモジュールが導入されました。公共の場でのAPI authdbinstance_idmessagingおよびproject_managementモジュールは現在のインスタンス上げるexceptions.FirebaseErrorタイプを。

# 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

exceptions.FirebaseErrorタイプは、多くのサブタイプがあります。 Admin SDKのパブリックAPIは、これらのサブタイプのみを発生させることができます。したがって、特定のサブタイプをキャッチし、エラーをよりきめ細かく処理するコードを記述できます。例えば:

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

代わりに、特定のエラーの種類をキャッチするのではなく、親キャッチすることも可能であるFirebaseErrorタイプと比較するエラーコードを。

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

各モジュールから延びる付加的なサブタイプを宣言することができるexceptions.FirebaseError親型(下記参照)。

エラー処理のための一般的なガイドライン:キャッチexceptions.FirebaseErrorエラー条件を区別する必要はありません。エラー状態を区別する必要がある場合は、より具体的なエラーサブクラスまたはエラーコードを探してください。

認証エラー処理の変更

JWT検証

auth.verify_id_token()メソッドはもはや発生させないValueErrorトークン検証エラーを示すために。代わりに、次のいずれかのエラータイプが発生します。

  • InvalidIdTokenError
  • ExpiredIdTokenError
  • RevokedIdTokenError

InvalidIdTokenErrorタイプが延びexceptions.InvalidArgumentErrorターンに延びるタイプ、 exceptions.FirebaseErrorタイプ。 ExpiredIdTokenErrorRevokedIdTokenError延長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')

同様に、 auth.verify_session_cookie()メソッドは、以下の例外タイプを上昇させます。

  • InvalidSessionCookieError
  • ExpiredSessionCookieError
  • RevokedSessionCookieError

クラス階層と意味は次のようにしているverify_id_token() API。

カスタムトークン

create_custom_token() APIを上げauth.TokenSignErrorの代わりValueError失敗を示すために。

# 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)

ユーザー管理

次の新しいエラータイプはに導入されているauthモジュール:

  • 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')

FCMエラー処理の変更

次の新しいエラータイプはに導入されているmessagingモジュール。

  • 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')

ユーザープロパティの削除

プロパティの削除することはできなくなりましたdisplay_namephoto_urlphone_numbercustom_claimsにそれらを設定することによりNone 。これらの設定Noneこれらのプロパティは変更されません。彼らは、明示的に設定する必要がありますauth.DELETE_ATTRIBUTEそれらを削除します。

# 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)