Catch up on everthing we announced at this year's Firebase Summit. Learn more

ربط العديد من موفري المصادقة بحساب في الوحدة

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم حالي. يمكن التعرف على المستخدمين من خلال نفس معرف مستخدم Firebase بغض النظر عن موفر المصادقة الذي استخدموه لتسجيل الدخول. على سبيل المثال ، يمكن للمستخدم الذي قام بتسجيل الدخول بكلمة مرور ربط حساب Google وتسجيل الدخول بأي من الطريقتين في المستقبل. أو ، يمكن لمستخدم مجهول ربط حساب Facebook ثم تسجيل الدخول لاحقًا باستخدام Facebook لمتابعة استخدام التطبيق الخاص بك.

قبل ان تبدأ

أضف دعمًا لاثنين أو أكثر من موفري المصادقة (ربما بما في ذلك المصادقة المجهولة) إلى تطبيقك.

و FirebaseAuth الفئة هي بوابة لجميع المكالمات API. ومن مليم من خلال FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

لربط بيانات اعتماد موفر المصادقة بحساب مستخدم موجود:

  1. سجّل دخول المستخدم باستخدام أي موفر أو طريقة مصادقة.
  2. إكمال تسجيل الدخول تدفق لموفر المصادقة الجديد حتى، ولكن ليس بما في ذلك استدعاء أحد Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync الأساليب. على سبيل المثال ، احصل على رمز معرف Google الخاص بالمستخدم أو رمز الوصول إلى Facebook أو البريد الإلكتروني وكلمة المرور.
  3. الحصول على Firebase.Auth.Credential لموفر المصادقة الجديد:

    جوجل الدخول في
    Firebase.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);
    
  4. تمرير 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.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

اذا كانت الدعوة إلى LinkWithCredentialAsync نجحت، يمكن للمستخدم الآن تسجيل الدخول باستخدام أي ربط موفر المصادقة والوصول إلى البيانات Firebase نفسها.

يمكنك إلغاء ربط موفر المصادقة من حساب ، بحيث لا يمكن للمستخدم تسجيل الدخول باستخدام هذا الموفر.

لإلغاء ربط مزود المصادقة من حساب المستخدم، وتمرير ID مزود ل 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.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});