يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم حالي. يمكن التعرف على المستخدمين من خلال نفس معرف مستخدم Firebase بغض النظر عن موفر المصادقة الذي استخدموه لتسجيل الدخول. على سبيل المثال ، يمكن للمستخدم الذي سجل الدخول بكلمة مرور ربط حساب Google وتسجيل الدخول بأي من الطريقتين في المستقبل. أو ، يمكن لمستخدم مجهول ربط حساب Facebook ثم تسجيل الدخول لاحقًا باستخدام Facebook لمتابعة استخدام التطبيق الخاص بك.
قبل ان تبدأ
أضف دعمًا لاثنين أو أكثر من موفري المصادقة (ربما بما في ذلك المصادقة المجهولة) إلى تطبيقك.
فئةFirebaseAuth
هي البوابة لجميع استدعاءات واجهة برمجة التطبيقات. يمكن الوصول إليه من خلال FirebaseAuth.DefaultInstance .Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
ربط بيانات اعتماد موفر المصادقة بحساب مستخدم
لربط بيانات اعتماد موفر المصادقة بحساب مستخدم موجود:
- سجّل دخول المستخدم باستخدام أي موفر أو طريقة مصادقة.
- أكمل تدفق تسجيل الدخول لموفر المصادقة الجديد حتى ، ولكن لا يشمل ، استدعاء أحد أساليب
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. على سبيل المثال ، احصل على رمز معرف Google الخاص بالمستخدم أو رمز الوصول إلى Facebook أو البريد الإلكتروني وكلمة المرور. احصل على
تسجيل الدخول إلى GoogleFirebase.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); });