Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Python 3.0.0 geçiş kılavuzu için Admim SDK

Python için Firebase Admin SDK'nın 3.0.0 sürümü, API'de bazı önemli değişiklikler sunar. Öncelikle, bu sürümdeki API değişiklikleri, Auth, FCM ve diğer Firebase özellikleri için hata işlemeye yönelik eklemeler ve iyileştirmelerdir.

Genel hata işleme değişiklikleri

Aşağıdaki istisna türleri kaldırıldı:

  • auth.AuthError
  • db.ApiCallError
  • instance_id.ApiCallError
  • messaging.ApiCallError
  • project_management.ApiCallError

Bunun yerine yeni bir firebase_admin.exceptions modülü tanıtıldı. auth , db , instance_id , messaging ve project_management modüllerindeki genel API'ler artık exceptions.FirebaseError örnekleri oluşturuyor.FirebaseError türü.

# 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 türünün birçok alt türü vardır. Yönetici SDK'sındaki genel API'ler yalnızca bu alt türleri yükseltebilir. Bu nedenle, belirli bir alt türü yakalayan ve hataları daha ayrıntılı bir şekilde işleyen kod yazabilirsiniz. Örneğin:

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

Belirli hata türlerini yakalamak yerine, üst FirebaseError türünü yakalamak ve hata kodlarını karşılaştırmak da mümkündür.

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

Her modül, exceptions.FirebaseError genişleyen ek alt türler bildirebilir.FirebaseError üst türü (aşağıya bakın).

Hata işleme için genel kılavuz: Hata koşulları arasında ayrım yapmanız gerekmediğinde exceptions.FirebaseError yakalayın.FirebaseError. Hata koşullarını ayırt etmeniz gerektiğinde, daha spesifik bir hata alt sınıfı veya hata kodu arayın.

Kimlik doğrulama hatası işleme değişiklikleri

JWT Doğrulaması

auth.verify_id_token() yöntemi artık belirteç doğrulama hatalarını belirtmek için ValueError yükseltmiyor. Bunun yerine, aşağıdaki hata türlerinden birini alırsınız:

  • InvalidIdTokenError
  • ExpiredIdTokenError
  • RevokedIdTokenError

InvalidIdTokenError türü, exceptions.InvalidArgumentError genişletir.InvalidArgumentError türü, sırayla exceptions.FirebaseError genişletir.FirebaseError türü. ExpiredIdTokenError ve RevokedIdTokenError uzatmak 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')

Benzer şekilde, auth.verify_session_cookie() yöntemi aşağıdaki istisna türlerini oluşturur:

  • InvalidSessionCookieError
  • ExpiredSessionCookieError
  • RevokedSessionCookieError

Sınıf hiyerarşisi ve semantiği, verify_id_token() API'sine benzer.

Özel jetonlar

create_custom_token() API, hataları belirtmek için auth.TokenSignError yerine ValueError değerini yükseltir.

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

Kullanıcı yönetimi

auth modülüne aşağıdaki yeni hata türleri 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 Hata işleme değişiklikleri

messaging modülüne aşağıdaki yeni hata türleri eklenmiştir.

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

Kullanıcı mülkü silme

Özellikler silmek artık mümkün değildir display_name , photo_url , phone_number ve custom_claims onları ayarlayarak None . Bunları None ayarlamak, bu özellikleri değiştirmeden bırakır. Bunları silmek için açıkça auth.DELETE_ATTRIBUTE olarak ayarlanmaları gerekir.

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