Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Hướng dẫn di chuyển SDK cho Python 3.0.0

Phiên bản 3.0.0 của SDK quản trị Firebase cho Python giới thiệu một số thay đổi quan trọng trong API. Về cơ bản, các thay đổi API trong bản phát hành này là các bổ sung và cải tiến trong xử lý lỗi cho Auth, FCM và các tính năng Firebase khác.

Thay đổi xử lý lỗi chung

Các loại ngoại lệ sau đây đã bị xóa:

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

Thay vào đó, một mô-đun firebase_admin.exceptions mới đã được giới thiệu. API công cộng trong auth , db , instance_id , messagingproject_management module nay tăng các trường hợp exceptions.FirebaseError loại.

 # 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
 

Các exceptions.FirebaseError lệ.FirebaseError có nhiều kiểu con. API công khai trong SDK quản trị chỉ có thể nâng các kiểu con này. Do đó, bạn có thể viết mã bắt một kiểu con cụ thể và xử lý các lỗi chi tiết hơn. Ví dụ:

 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
 

Thay vì bắt các loại lỗi cụ thể, cũng có thể bắt loại FirebaseError gốc và so sánh các mã lỗi.

 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
 

Mỗi mô-đun có thể khai báo các kiểu con bổ sung mở rộng từ các exceptions.FirebaseError lệ.FirebaseError kiểu cha mẹ (xem bên dưới).

Hướng dẫn chung để xử lý lỗi: Bắt exceptions.FirebaseError lệ.FirebaseError khi bạn không cần phân biệt giữa các điều kiện lỗi. Tìm kiếm một lớp con lỗi cụ thể hơn hoặc mã lỗi khi bạn cần phân biệt các điều kiện lỗi.

Xác thực thay đổi xử lý lỗi

Xác minh JWT

Phương thức auth.verify_id_token() không còn tăng ValueError để chỉ ra lỗi xác thực mã thông báo. Thay vào đó, bạn sẽ nhận được một trong các loại lỗi sau:

  • InvalidIdTokenError
  • ExpiredIdTokenError
  • RevokedIdTokenError

Kiểu InvalidIdTokenError mở rộng các exceptions.InvalidArgumentError InvalidIdTokenError , lần lượt mở rộng các exceptions.FirebaseError InvalidIdTokenError . ExpiredIdTokenErrorRevokedIdTokenError mở rộng 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')
 

Tương tự, phương thức auth.verify_session_cookie() đưa ra các loại ngoại lệ sau:

  • InvalidSessionCookieError
  • ExpiredSessionCookieError
  • RevokedSessionCookieError

Hệ thống phân cấp lớp và ngữ nghĩa tương tự như API verify_id_token() .

Mã thông báo tùy chỉnh

API create_custom_token() tăng auth.TokenSignError thay vì ValueError để chỉ ra các lỗi.

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

Quản lý người dùng

Các loại lỗi mới sau đây đã được đưa vào mô-đun 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')
 

Thay đổi xử lý lỗi FCM

Các loại lỗi mới sau đây đã được đưa vào mô-đun 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')
 

Xóa tài sản người dùng

Không còn có thể xóa các thuộc tính display_name , photo_url , phone_numbercustom_claims bằng cách đặt chúng thành None . Đặt các giá trị này thành None để các thuộc tính này không thay đổi. Chúng phải được đặt rõ ràng thành auth.DELETE_ATTRIBUTE để xóa chúng.

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