Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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)