คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายได้โดยการลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่ ระบบจะระบุผู้ใช้ด้วยรหัสผู้ใช้ Firebase เดียวกัน ไม่ว่าผู้ใช้จะใช้ผู้ให้บริการตรวจสอบสิทธิ์รายใดในการลงชื่อเข้าใช้ เช่น ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยรหัสผ่านจะลิงก์บัญชี Google และลงชื่อเข้าใช้ด้วยวิธีใดก็ได้ในอนาคต หรือผู้ใช้ที่ไม่ระบุชื่อจะลิงก์บัญชี Facebook แล้วลงชื่อเข้าใช้ด้วย Facebook ในภายหลังเพื่อใช้แอปของคุณต่อไปก็ได้
ก่อนเริ่มต้น
เพิ่มการรองรับผู้ให้บริการตรวจสอบสิทธิ์ 2 รายขึ้นไป (อาจรวมถึง การตรวจสอบสิทธิ์แบบไม่ระบุตัวตน) ลงในแอป
ลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้
วิธีลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
ลงชื่อเข้าใช้ผู้ใช้โดยใช้ผู้ให้บริการหรือวิธีการตรวจสอบสิทธิ์ใดก็ได้
ทำขั้นตอนการลงชื่อเข้าใช้สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่ให้เสร็จสมบูรณ์ โดยไม่ต้องเรียกใช้เมธอด
signInWith
- เช่น รับโทเค็นรหัส Google, โทเค็นเพื่อการเข้าถึง Facebook หรืออีเมลและรหัสผ่านของผู้ใช้รับออบเจ็กต์
Credential
สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
ส่งออบเจ็กต์
Credential
ไปยังเมธอดlinkWithCredential()
ของผู้ใช้ที่ลงชื่อเข้าใช้try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
หากการเรียกใช้ linkWithCredential()
สำเร็จ ตอนนี้ผู้ใช้จะลงชื่อเข้าใช้โดยใช้
ผู้ให้บริการตรวจสอบสิทธิ์ที่ลิงก์ไว้และเข้าถึงข้อมูล Firebase เดียวกันได้
ยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์จากบัญชีผู้ใช้
คุณยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีได้ เพื่อให้ผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการรายนั้นไม่ได้อีกต่อไป
หากต้องการยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์จากบัญชีผู้ใช้ ให้ส่งรหัสผู้ให้บริการไปยังเมธอด unlink()
คุณสามารถรับรหัสผู้ให้บริการของผู้ให้บริการการตรวจสอบสิทธิ์ที่ลิงก์กับ
ผู้ใช้ได้จากพร็อพเพอร์ตี้ providerData
ของออบเจ็กต์ User
try {
await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "no-such-provider":
print("The user isn't linked to the provider or the provider "
"doesn't exist.");
break;
default:
print("Unknown error.");
}
}
การแก้ปัญหา
หากพบข้อผิดพลาดขณะพยายามลิงก์หลายบัญชี โปรดดู เอกสารประกอบเกี่ยวกับอีเมลที่ยืนยันแล้ว