Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

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)