Admin SDK עבור Python 3.0.0 מדריך ההעברה

גרסה 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)