Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Admin 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モジュールが導入されました。 authdbinstance_idmessaging 、およびproject_managementモジュールのパブリックAPIで、 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タイプが拡張されます。 ExpiredIdTokenErrorRevokedIdTokenErrorInvalidIdTokenErrorを拡張します。

# 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は、 ValueErrorではなくauth.TokenSignErrorを発生させて、失敗を示します。

# 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_claimsNoneに設定して削除することはできなくなりました。これらを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)