จัดการข้อผิดพลาดในการตรวจสอบสิทธิ์ของแพลตฟอร์ม Firebase บน Apple

หากการเรียกกลับเมื่อเสร็จสมบูรณ์ในเมธอด Authentication ได้รับอาร์กิวเมนต์ NSError ที่ไม่ใช่ nil แสดงว่าเกิดข้อผิดพลาด หากต้องการส่งไปยังตรรกะการจัดการข้อผิดพลาดที่เหมาะสมในโค้ดที่ใช้งานจริง ให้ตรวจสอบรหัสข้อผิดพลาดกับข้อผิดพลาดที่พบบ่อยและข้อผิดพลาดเฉพาะเมธอดที่ระบุไว้ด้านล่าง

ข้อผิดพลาดบางอย่างแก้ไขได้ด้วยการดำเนินการของผู้ใช้ เช่น FIRAuthErrorCodeUserTokenExpired แก้ไขได้โดยการลงชื่อเข้าใช้ของผู้ใช้อีกครั้ง และ FIRAuthErrorCodeWrongPassword แก้ไขได้โดยการขอให้ผู้ใช้ระบุ รหัสผ่านที่ถูกต้อง

ยกเว้นในกรณีของ FIRAuthErrorCodeNetworkError หรือ FIRAuthErrorCodeTooManyRequests การลองดำเนินการที่ล้มเหลวอีกครั้งด้วยอาร์กิวเมนต์เดิม จะไม่มีทางสำเร็จ อย่าคาดเดาว่าการดำเนินการ มีผลในฝั่งเซิร์ฟเวอร์หรือไม่

เมื่อตรวจสอบหรือบันทึกข้อผิดพลาด ให้ตรวจสอบuserInfoพจนานุกรม FIRAuthErrorNameKey มีสตริงชื่อข้อผิดพลาดข้ามแพลตฟอร์มที่ใช้ระบุข้อผิดพลาดได้ NSLocalizedDescriptionKey มีคำอธิบายของข้อผิดพลาด คำอธิบายนี้มีไว้สำหรับนักพัฒนาแอป ไม่ใช่ผู้ใช้ NSUnderlyingErrorKey มีข้อผิดพลาดพื้นฐานที่ทำให้เกิดข้อผิดพลาดใน คำถาม หากมีข้อผิดพลาดพื้นฐาน

นอกจากฟิลด์หลักที่ระบุไว้ข้างต้นแล้ว ยังมีฟิลด์อื่นๆ ในuserInfoพจนานุกรมที่คุณอาจพบว่ามีประโยชน์เมื่อวินิจฉัยข้อผิดพลาด

รหัสข้อผิดพลาดที่ใช้ร่วมกันในเมธอด API ทั้งหมด

รหัส ความหมาย
FIRAuthErrorCodeNetworkError แสดงว่าเกิดข้อผิดพลาดเกี่ยวกับเครือข่ายในระหว่างการดำเนินการ
FIRAuthErrorCodeUserNotFound ระบุว่าไม่พบบัญชีผู้ใช้ กรณีนี้อาจเกิดขึ้นหากมีการลบบัญชีผู้ใช้
FIRAuthErrorCodeUserTokenExpired ระบุว่าโทเค็นของผู้ใช้ปัจจุบันหมดอายุแล้ว เช่น ผู้ใช้อาจเปลี่ยนรหัสผ่านของบัญชีในอุปกรณ์อื่น คุณต้องแจ้งให้ผู้ใช้ลงชื่อเข้าใช้อีกครั้งในอุปกรณ์นี้
FIRAuthErrorCodeTooManyRequests ระบุว่าคำขอถูกบล็อกหลังจากมีการส่งคำขอจำนวนมากอย่างผิดปกติจากอุปกรณ์ของผู้โทรไปยังเซิร์ฟเวอร์ของ Firebase Authentication โปรดรอสักครู่แล้วลองอีกครั้ง
FIRAuthErrorCodeInvalidAPIKey ระบุว่าแอปพลิเคชันได้รับการกำหนดค่าด้วยคีย์ API ที่ไม่ถูกต้อง
FIRAuthErrorCodeAppNotAuthorized ระบุว่าแอปไม่ได้รับอนุญาตให้ใช้การตรวจสอบสิทธิ์ Firebase กับคีย์ API ที่ระบุ ให้ไปที่คอนโซล Google API แล้วตรวจสอบในแท็บข้อมูลเข้าสู่ระบบว่าคีย์ 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 ระบุว่าอีเมลที่อ้างสิทธิ์โดยข้อมูลเข้าสู่ระบบ (เช่น อีเมลในโทเค็นเพื่อเข้าถึง Facebook) มีบัญชีที่มีอยู่ใช้งานอยู่แล้ว ซึ่งไม่สามารถตรวจสอบสิทธิ์ด้วยวิธีการลงชื่อเข้านี้ได้ เรียกใช้ fetchProvidersForEmail สำหรับอีเมลของผู้ใช้รายนี้ แล้วแจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการลงชื่อเข้าใช้ที่ส่งคืนมา ข้อผิดพลาดนี้จะเกิดขึ้นเฉพาะในกรณีที่เปิดใช้ "1 บัญชีต่อ 1 อีเมล" ในคอนโซล 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 (ไปที่ความปลอดภัย > การตรวจสอบสิทธิ์)
FIRAuthErrorCodeEmailAlreadyInUse ระบุว่าบัญชีที่มีอยู่ใช้อีเมลที่อ้างสิทธิ์โดยข้อมูลเข้าสู่ระบบอยู่แล้ว (เช่น อีเมลในโทเค็นเพื่อเข้าถึง Facebook) ซึ่งไม่สามารถตรวจสอบสิทธิ์อีกครั้งด้วยวิธีการลงชื่อเข้านี้ เรียกใช้ fetchProvidersForEmail สำหรับอีเมลของผู้ใช้รายนี้ แล้วแจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการลงชื่อเข้าใช้ที่ส่งคืนมา ข้อผิดพลาดนี้จะเกิดขึ้นเฉพาะในกรณีที่เปิดใช้ "1 บัญชีต่อ 1 อีเมล" ในคอนโซล 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