คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้ผู้ให้บริการการตรวจสอบสิทธิ์หลายรายได้โดยลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่ ผู้ใช้จะระบุตัวผู้ใช้ได้ด้วยรหัสผู้ใช้ Firebase เดียวกัน โดยไม่คำนึงถึงผู้ให้บริการตรวจสอบสิทธิ์ที่ใช้ลงชื่อเข้าใช้ เช่น ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยรหัสผ่านสามารถลิงก์บัญชี Google และลงชื่อเข้าใช้ด้วยวิธีใดวิธีหนึ่งในอนาคต หรือผู้ใช้ที่ไม่ระบุชื่อสามารถเชื่อมโยงบัญชี Facebook แล้วลงชื่อเข้าใช้ด้วย Facebook ในภายหลังเพื่อใช้แอปของคุณต่อไป
ก่อนเริ่มต้น
เพิ่มการรองรับผู้ให้บริการการตรวจสอบสิทธิ์ 2 รายขึ้นไป (อาจรวมถึงการตรวจสอบสิทธิ์แบบไม่ระบุตัวตน) ในแอป
คลาสFirebaseAuth
เป็นเกตเวย์สำหรับการเรียก API ทั้งหมด
ซึ่งเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstance
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
ลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับบัญชีผู้ใช้
วิธีลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
- ลงชื่อเข้าใช้ผู้ใช้โดยใช้ผู้ให้บริการหรือวิธีการตรวจสอบสิทธิ์ใดก็ได้
- ดำเนินการตามขั้นตอนการลงชื่อเข้าใช้ของผู้ให้บริการการตรวจสอบสิทธิ์รายใหม่จนเสร็จสมบูรณ์ แต่ไม่รวมการเรียกใช้เมธอดของ
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
เช่น รับโทเค็น Google ID, โทเค็นเพื่อการเข้าถึง Facebook หรืออีเมลและรหัสผ่านของผู้ใช้ รับ
Google Sign-InFirebase.Auth.Credential
สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่:Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
การเข้าสู่ระบบ FacebookFirebase.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); });