טיפול בשגיאות אימות של מוצרי הפלטפורמה של Firebase ב-Firebase

אם פונקציית ה-callback להשלמה בשיטות Authentication מקבלת ארגומנט NSError שאינו nil, אירעה שגיאה. כדי לשלוח ללוגיקה המתאימה לטיפול בשגיאות בקוד הייצור, צריך לבדוק את קוד השגיאה מול השגיאות הנפוצות והשגיאות הספציפיות לשיטה שמפורטות בהמשך.

חלק מהשגיאות אפשר לפתור באמצעות פעולות ספציפיות של המשתמש. לדוגמה, אפשר לפתור את השגיאה FIRAuthErrorCodeUserTokenExpired על ידי כניסה מחדש של המשתמש לחשבון, ואת השגיאה FIRAuthErrorCodeWrongPassword על ידי בקשה מהמשתמש להזין את הסיסמה הנכונה.

למעט במקרים של FIRAuthErrorCodeNetworkError או FIRAuthErrorCodeTooManyRequests, ניסיון חוזר של פעולה שנכשלה עם אותם ארגומנטים לא יצליח אף פעם. אל תניחו שהפעולה נכנסה לתוקף בצד השרת.

כשבודקים שגיאות או מתעדים אותן, כדאי לעיין במילון userInfo. ‫FIRAuthErrorNameKey מכיל מחרוזת של שם שגיאה בפלטפורמות שונות שאפשר להשתמש בה כדי לזהות את השגיאה. השדה NSLocalizedDescriptionKey מכיל תיאור של השגיאה. התיאור הזה מיועד למפתח, ולא למשתמש. ‫NSUnderlyingErrorKey מכיל את השגיאה הבסיסית שגרמה לשגיאה המדוברת, אם קיימת שגיאה בסיסית.

בנוסף לשדות העיקריים שצוינו למעלה, יכולים להיות עוד שדות במילון userInfo שיכולים לעזור לכם באבחון שגיאות.

קודי שגיאה שמשותפים לכל ה-methods של ה-API

קוד משמעות
FIRAuthErrorCodeNetworkError מציין שגיאה בחיבור לרשת שאירעה במהלך הפעולה.
FIRAuthErrorCodeUserNotFound מציין שלא נמצא חשבון משתמש. מצב כזה יכול לקרות אם חשבון המשתמש נמחק.
FIRAuthErrorCodeUserTokenExpired מציין שתוקף האסימון של המשתמש הנוכחי פג. לדוגמה, יכול להיות שהמשתמש שינה את סיסמת החשבון במכשיר אחר. צריך לבקש מהמשתמש להיכנס שוב למכשיר.
FIRAuthErrorCodeTooManyRequests מציין שהבקשה נחסמה אחרי שמספר חריג של בקשות נשלחו מהמכשיר של המתקשר לשרתים של Firebase Authentication. כדאי לחכות קצת ואז לנסות שוב.
FIRAuthErrorCodeInvalidAPIKey מציין שהאפליקציה הוגדרה עם מפתח API לא תקין.
FIRAuthErrorCodeAppNotAuthorized מציין שהאפליקציה לא מורשית להשתמש באימות ב-Firebase עם מפתח ה-API שסופק. צריך לעבור אל Google API Console ולבדוק בכרטיסייה 'פרטי כניסה' שמזהה חבילת האפליקציה שבה אתם משתמשים מופיע ברשימת ההיתרים של מפתח ה-API.
FIRAuthErrorCodeKeychainError מציין שקרתה שגיאה בזמן הגישה למחזיק המפתחות. השדות NSLocalizedFailureReasonErrorKey ו-NSUnderlyingErrorKey במילון NSError.userInfo יכילו מידע נוסף על השגיאה שנתקלתם בה.
FIRAuthErrorCodeInternalError מציין שאירעה שגיאה פנימית. צריך לדווח על השגיאה עם אובייקט NSError כולו.

קודי שגיאה ספציפיים לשיטה

FIRAuth

fetchProvidersForEmail:completion:

קוד משמעות
FIRAuthErrorCodeInvalidEmail מציין שכתובת האימייל לא תקינה.

signInWithEmail:password:completion:

קוד משמעות
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות עם כתובת אימייל וסיסמה לא מופעלים. מפעילים אותם במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).
FIRAuthErrorCodeInvalidEmail מציין שכתובת האימייל לא תקינה.
FIRAuthErrorCodeUserDisabled מציין שהחשבון של המשתמש מושבת.
FIRAuthErrorCodeWrongPassword מציין שהמשתמש ניסה להיכנס לחשבון עם סיסמה שגויה.

signInWithCredential:completion:

קוד משמעות
FIRAuthErrorCodeInvalidCredential מציין שהאישורים שסופקו לא תקפים. יכול להיות שהתוקף שלו פג או שהוא לא תקין.
FIRAuthErrorCodeInvalidEmail אם סוג האישורים הוא EmailPasswordAuthCredential, הערך הזה מציין שהפורמט של כתובת האימייל שגוי.
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות עם ספק הזהויות שמיוצג על ידי פרטי הכניסה לא מופעלים. מפעילים אותם במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).
FIRAuthErrorCodeEmailAlreadyInUse מציין שכתובת האימייל שמאומתת על ידי פרטי הכניסה (לדוגמה, כתובת האימייל באסימון גישה של פייסבוק) כבר נמצאת בשימוש בחשבון קיים, שלא ניתן לאמת אותו באמצעות שיטת הכניסה הזו. קוראים ל-fetchProvidersForEmail כדי לקבל את כתובת האימייל של המשתמש, ואז מבקשים ממנו להיכנס באמצעות אחד מספקי הכניסה שמוחזרים. השגיאה הזו תוצג רק אם האפשרות 'חשבון אחד לכל כתובת אימייל' מופעלת במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה הגדרות).
FIRAuthErrorCodeUserDisabled מציין שהחשבון של המשתמש מושבת.
FIRAuthErrorCodeWrongPassword מציין שהמשתמש ניסה להיכנס עם סיסמה שגויה, אם פרטי הכניסה הם מהסוג EmailPasswordAuthCredential.

signInAnonymouslyWithCompletion:

קוד משמעות
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות אנונימיים לא מופעלים. מפעילים אותם במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).

signInWithCustomToken:completion:

קוד משמעות
FIRAuthErrorCodeInvalidCustomToken מציין שגיאת אימות בטוקן המותאם אישית.
FIRAuthErrorCodeCustomTokenMismatch מציין שחשבון השירות ומפתח ה-API שייכים לפרויקטים שונים.

createUserWithEmail:password:completion:

קוד משמעות
FIRAuthErrorCodeInvalidEmail מציין שכתובת האימייל לא תקינה.
FIRAuthErrorCodeEmailAlreadyInUse הודעה שמופיעה אם כתובת האימייל שבה ניסיתם להירשם כבר קיימת. מתקשרים אל fetchProvidersForEmail כדי לבדוק באילו מנגנוני כניסה המשתמש השתמש, ומבקשים מהמשתמש להיכנס באמצעות אחד מהם.
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות עם כתובת אימייל וסיסמה לא מופעלים. מפעילים אותם במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).
FIRAuthErrorCodeWeakPassword מציין ניסיון להגדיר סיסמה שנחשבת חלשה מדי. השדה NSLocalizedFailureReasonErrorKey באובייקט המילון NSError.userInfo יכיל הסבר מפורט יותר שאפשר להציג למשתמש.

signOut:

קוד משמעות
FIRAuthErrorCodeKeychainError הודעה על שגיאה שקרתה בזמן הגישה למחזיק המפתחות. השדות NSLocalizedFailureReasonErrorKey ו-NSUnderlyingErrorKey במילון NSError.userInfo יכילו מידע נוסף על השגיאה שנתקלתם בה.

FIRUser

שגיאות נפוצות בפעולות של FIRUser

קוד משמעות
FIRAuthErrorCodeInvalidUserToken מציין שאסימון הרענון של המשתמש שמחובר לחשבון, שמכיל פרטי סשן, לא תקין. צריך לבקש מהמשתמש להיכנס שוב למכשיר.
FIRAuthErrorCodeUserDisabled מציין שהחשבון של המשתמש מושבת ואי אפשר להשתמש בו יותר עד שמפעילים אותו מחדש במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה משתמשים).

reauthenticateWithCredential:completion:

קוד משמעות
FIRAuthErrorCodeInvalidCredential מציין שהאישורים שסופקו לא תקפים. יכול להיות שהתוקף שלו פג או שהוא לא תקין.
FIRAuthErrorCodeInvalidEmail אם סוג האישורים הוא EmailPasswordAuthCredential, הערך הזה מציין שהפורמט של כתובת האימייל שגוי.
FIRAuthErrorCodeWrongPassword מציין שהמשתמש ניסה לבצע אימות מחדש עם סיסמה שגויה, אם פרטי הכניסה הם מהסוג EmailPasswordAuthCredential.
FIRAuthErrorCodeUserMismatch מציין שהייתה ניסיון לאמת מחדש משתמש שלא מחובר כרגע.
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות עם ספק הזהויות שמיוצג על ידי פרטי הכניסה לא מופעלים. כדי להפעיל אותם במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
FIRAuthErrorCodeEmailAlreadyInUse מציין שכתובת האימייל שצוינה על ידי פרטי הכניסה (למשל, כתובת האימייל בטוקן גישה של פייסבוק) כבר נמצאת בשימוש בחשבון קיים, ואי אפשר לאמת מחדש את החשבון הזה באמצעות שיטת הכניסה הזו. קוראים ל-fetchProvidersForEmail כדי לקבל את כתובת האימייל של המשתמש, ואז מבקשים ממנו להיכנס באמצעות אחד מספקי הכניסה שמוחזרים. השגיאה הזו תוצג רק אם האפשרות 'חשבון אחד לכל כתובת אימייל' מופעלת במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה הגדרות).
FIRAuthErrorCodeUserDisabled מציין שהחשבון של המשתמש מושבת.

updateEmail:completion:

קוד משמעות
FIRAuthErrorCodeEmailAlreadyInUse מציין שכתובת האימייל כבר נמצאת בשימוש בחשבון אחר.
FIRAuthErrorCodeInvalidEmail מציין שכתובת האימייל לא תקינה.
FIRAuthErrorCodeRequiresRecentLogin עדכון כתובת האימייל של משתמש הוא פעולה רגישה מבחינת אבטחה, שנדרשת לגביה התחברות עדכנית של המשתמש. השגיאה הזו מציינת שהמשתמש לא נכנס לחשבון בזמן האחרון. כדי לפתור את הבעיה, צריך לאמת מחדש את המשתמש באמצעות הפעלת reauthenticateWithCredential:completion: ב-FIRUser.

updatePassword:completion:

קוד משמעות
FIRAuthErrorCodeOperationNotAllowed מציין שהאדמין השבית את הכניסה באמצעות ספק הזהויות שצוין.
FIRAuthErrorCodeRequiresRecentLogin עדכון הסיסמה של משתמש הוא פעולה רגישה מבחינת אבטחה, שנדרשת לגביה התחברות עדכנית של המשתמש. השגיאה הזו מציינת שהמשתמש לא נכנס לחשבון בזמן האחרון. כדי לפתור את הבעיה, צריך לבצע אימות מחדש של המשתמש באמצעות הפעלת reauthenticateWithCredential:completion: ב-FIRUser.
FIRAuthErrorCodeWeakPassword מציין ניסיון להגדיר סיסמה שנחשבת חלשה מדי. השדה NSLocalizedFailureReasonErrorKey באובייקט המילון NSError.userInfo יכיל הסבר מפורט יותר שאפשר להציג למשתמש.

linkWithCredential:completion:

קוד משמעות
FIRAuthErrorCodeProviderAlreadyLinked מציין ניסיון לקשר ספק מסוג שכבר מקושר לחשבון הזה.
FIRAuthErrorCodeCredentialAlreadyInUse מציין ניסיון לקשר אישורים שכבר קושרו לחשבון Firebase אחר.
FIRAuthErrorCodeOperationNotAllowed מציין שחשבונות עם ספק הזהויות שמיוצג על ידי פרטי הכניסה לא מופעלים. מפעילים אותם במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).

יכול להיות שהשיטה הזו תחזיר גם קודי שגיאה שמשויכים ל-updateEmail:completion: ול-updatePassword:completion: ב-FIRUser.

unlinkFromProvider:completion:

קוד משמעות
FIRAuthErrorCodeNoSuchProvider האינדיקטור הזה מציין ניסיון לבטל את הקישור של ספק שלא מקושר לחשבון.
FIRAuthErrorCodeRequiresRecentLogin עדכון כתובת האימייל היא פעולה רגישה מבחינת אבטחה, שמחייבת התחברות עדכנית של המשתמש. השגיאה הזו מציינת שהמשתמש לא נכנס לחשבון בזמן האחרון. כדי לפתור את הבעיה, צריך לבצע אימות מחדש של המשתמש באמצעות הפעלת reauthenticateWithCredential:completion: ב-FIRUser.

sendEmailVerificationWithCompletion:

קוד משמעות
FIRAuthErrorCodeUserNotFound מציין שלא נמצא חשבון משתמש.

deleteWithCompletion:

קוד משמעות
FIRAuthErrorCodeRequiresRecentLogin מחיקת חשבון משתמש היא פעולה רגישה מבחינת אבטחה, שנדרשת לגביה התחברות לחשבון על ידי המשתמש בזמן האחרון. השגיאה הזו מציינת שהמשתמש לא נכנס לחשבון בזמן האחרון. כדי לפתור את הבעיה, צריך לאמת מחדש את המשתמש באמצעות הפעלת reauthenticateWithCredential:completion: ב-FIRUser.