คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายได้โดยการลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่ ระบบจะระบุผู้ใช้ด้วยรหัสผู้ใช้ Firebase เดียวกัน ไม่ว่าผู้ใช้จะใช้ผู้ให้บริการตรวจสอบสิทธิ์รายใดในการลงชื่อเข้าใช้ เช่น ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยรหัสผ่านจะลิงก์บัญชี Google และลงชื่อเข้าใช้ด้วยวิธีใดก็ได้ในอนาคต หรือผู้ใช้ที่ไม่ระบุชื่อจะลิงก์บัญชี Facebook แล้วลงชื่อเข้าใช้ด้วย Facebook ในภายหลังเพื่อใช้แอปของคุณต่อไปก็ได้
ก่อนเริ่มต้น
เพิ่มการรองรับผู้ให้บริการตรวจสอบสิทธิ์ 2 รายขึ้นไป (อาจรวมถึง การตรวจสอบสิทธิ์แบบไม่ระบุตัวตน) ลงในแอป
FirebaseAuth
คลาสเป็นเกตเวย์สำหรับการเรียก API ทั้งหมด
โดยจะเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstance
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
ลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้
วิธีลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
- ลงชื่อเข้าใช้ผู้ใช้โดยใช้ผู้ให้บริการหรือวิธีการตรวจสอบสิทธิ์ใดก็ได้
- ทําขั้นตอนการลงชื่อเข้าใช้สําหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่ให้เสร็จสมบูรณ์ โดยไม่ต้องเรียกใช้เมธอด
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
ใดเมธอดหนึ่ง เช่น รับโทเค็นรหัส Google, โทเค็นเพื่อการเข้าถึง Facebook หรืออีเมลและรหัสผ่านของผู้ใช้ รับ
การลงชื่อเข้าใช้ด้วย GoogleFirebase.Auth.Credential
สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่ การเข้าสู่ระบบด้วย FacebookFirebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
การลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่านFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
ส่งออบเจ็กต์
Firebase.Auth.Credential
ไปยังเมธอดLinkWithCredentialAsync
ของผู้ใช้ที่ลงชื่อเข้าใช้auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
การเรียกใช้
LinkWithCredentialAsync
จะล้มเหลวหากข้อมูลเข้าสู่ระบบ ลิงก์กับบัญชีผู้ใช้รายอื่นอยู่แล้ว ในกรณีนี้ คุณต้องจัดการ การผสานบัญชีและข้อมูลที่เกี่ยวข้องตามความเหมาะสมกับแอปของคุณ// Gather data for the currently signed in User. string currentUserId = auth.CurrentUser.UserId; string currentEmail = auth.CurrentUser.Email; string currentDisplayName = auth.CurrentUser.DisplayName; System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl; // Sign in with the new credentials. auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); // TODO: Merge app specific details using the newUser and values from the // previous user, saved above. });
หากการเรียกใช้ LinkWithCredentialAsync
สำเร็จ ตอนนี้ผู้ใช้จะลงชื่อเข้าใช้โดยใช้
ผู้ให้บริการตรวจสอบสิทธิ์ที่ลิงก์ไว้และเข้าถึงข้อมูล Firebase เดียวกันได้
ยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์จากบัญชีผู้ใช้
คุณยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีได้ เพื่อให้ผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการรายนั้นไม่ได้อีกต่อไป
หากต้องการยกเลิกการลิงก์ผู้ให้บริการตรวจสอบสิทธิ์จากบัญชีผู้ใช้ ให้ส่งรหัสผู้ให้บริการไปยังเมธอด UnlinkAsync
คุณดูรหัสผู้ให้บริการของผู้ให้บริการการตรวจสอบสิทธิ์ที่ลิงก์กับผู้ใช้ได้โดยเรียกใช้
ProviderData
// Unlink the sign-in provider from the currently active user. // providerIdString is a string identifying a provider, // retrieved via FirebaseAuth.FetchProvidersForEmail(). auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UnlinkAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UnlinkAsync encountered an error: " + task.Exception); return; } // The user has been unlinked from the provider. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
การแก้ปัญหา
หากพบข้อผิดพลาดขณะพยายามลิงก์หลายบัญชี โปรดดู เอกสารเกี่ยวกับ อีเมลที่ยืนยันแล้ว