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
, messaging
và project_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
. ExpiredIdTokenError
và RevokedIdTokenError
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_number
và custom_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)