גרסה 3.0.0 של Firebase Admin SDK עבור Python מציגה כמה שינויים חשובים ב-API. בעיקר, השינויים ב-API במהדורה זו הם תוספות ושיפורים בטיפול בשגיאות עבור Auth, FCM ותכונות אחרות של Firebase.
שינויים כלליים בטיפול בשגיאות
סוגי החריגים הבאים הוסרו:
-
auth.AuthError
-
db.ApiCallError
-
instance_id.ApiCallError
-
messaging.ApiCallError
-
project_management.ApiCallError
במקום זאת, מודול firebase_admin.exceptions
חדש הוצג. ממשקי API ציבוריים במודולים auth
, db
, instance_id
, messaging
וניהול project_management
מעלים כעת מופעים של exceptions.FirebaseError
. סוג 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
יש תתי סוגים רבים. ממשקי API ציבוריים ב-Admin SDK יכולים להעלות רק תת-סוגים אלה. לכן, אתה יכול לכתוב קוד שתופס תת-סוג מסוים ומטפל בשגיאות בצורה מפורטת יותר. לדוגמה:
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
. FirebaseError כאשר אינך צריך להבדיל בין תנאי שגיאה. חפש תת-מחלקת שגיאה ספציפית יותר או קוד שגיאה כאשר אתה צריך להבדיל בין מצבי שגיאה.
שגיאת אימות טיפול בשינויים
אימות JWT
השיטה auth.verify_id_token()
כבר לא מעלה את ValueError
כדי לציין שגיאות אימות אסימון. במקום זאת, תקבל אחד מסוגי השגיאות הבאים:
-
InvalidIdTokenError
-
ExpiredIdTokenError
-
RevokedIdTokenError
סוג InvalidIdTokenError
מרחיב את סוג exceptions.InvalidArgumentError
, אשר בתורו מרחיב את סוג exceptions.FirebaseError
. ExpiredIdTokenError
ו- RevokedIdTokenError
מרחיבים את 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.
אסימונים מותאמים אישית
ה-API של create_custom_token()
מעלה 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_number
ו- custom_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)