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

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

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

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

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

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

קודי שגיאה נפוצים לכל שיטות ה-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:complete:

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

signInWithEmail:password:complete:

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

signInWithCredential:complete:

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

signInAnonymouslyWithCompletion:

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

signInWithCustomToken:complete:

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

createUserWithEmail:password:complete:

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

signOut:

קוד משמעות
FIRAuthErrorCodeKeychainError צוינה שגיאה במהלך הגישה ל-Keychain. השדות NSLocalizedFailureReasonErrorKey ו-NSUnderlyingErrorKey במילון NSError.userInfo יכילו מידע נוסף על השגיאה שבה נתקלת.

FIRUser

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

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

reauthenticateWithCredential:complete:

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

updateEmail:complete:

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

updatePassword:complete:

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

linkWithCredential:complete:

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

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

linkFromProvider:complete:

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

sendEmailAuthenticationWithCompletion:

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

deleteWithCompletion:

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