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

Python 3.0.0 마이그레이션 가이드용 Admim SDK

Python용 Firebase Admin SDK 버전 3.0.0에서는 API에 몇 가지 중요한 변경 사항이 도입되었습니다. 주로 이 릴리스의 API 변경 사항은 인증, FCM 및 기타 Firebase 기능에 대한 오류 처리의 추가 및 개선 사항입니다.

일반 오류 처리 변경 사항

다음 예외 유형이 제거되었습니다.

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

대신, 새로운 firebase_admin.exceptions 모듈이 도입되었습니다. 공공의 API를 auth , db , instance_id , messagingproject_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_name , photo_url , phone_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)