Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

Phiên bản 3.0.0 của SDK quản trị Firebase dành 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 việc xử lý lỗi đối với Auth, FCM và các tính năng khác của Firebase.

Các thay đổi về xử lý lỗi chung

Các loại ngoại lệ sau đã 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. Các API công khai trong các mô-đun auth , db , instance_id , messagingproject_management hiện nâng cao các trường hợp exceptions.FirebaseError . Loại 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

Loại exceptions.FirebaseError có nhiều kiểu con. API công khai trong SDK quản trị chỉ có thể nâng cao các loại phụ này. Do đó, bạn có thể viết mã bắt một kiểu con cụ thể và xử lý 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 mẹ 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 Kiểu cha FirebaseError (xem bên dưới).

Hướng dẫn chung để xử lý lỗi: Bắt các 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 lớp con lỗi hoặc mã lỗi cụ thể hơn khi bạn cần phân biệt các điều kiện lỗi.

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

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ẽ gặp một trong các loại lỗi sau:

  • InvalidIdTokenError
  • ExpiredIdTokenError
  • RevokedIdTokenError

Loại InvalidIdTokenError mở rộng loại exceptions.InvalidArgumentError , lần lượt mở rộng loại exceptions.FirebaseError . 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() tăng các loại ngoại lệ sau:

  • InvalidSessionCookieError
  • ExpiredSessionCookieError
  • RevokedSessionCookieError

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

Lỗi FCM khi xử lý các thay đổi

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

Bạn không 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 chúng thành None sẽ giữ nguyên các thuộc tính này. 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)