C++ का उपयोग करके एक से अधिक प्रामाणिक प्रदाताओं को एक खाते से लिंक करें

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को मौजूदा उपयोगकर्ता खाते से लिंक करके एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके उपयोगकर्ताओं को अपने ऐप में साइन इन करने की अनुमति दे सकते हैं। उपयोगकर्ताओं को उसी Firebase उपयोगकर्ता आईडी से पहचाना जा सकता है, भले ही वे प्रमाणीकरण प्रदाता द्वारा साइन इन करने के लिए उपयोग किए गए हों। उदाहरण के लिए, पासवर्ड के साथ साइन इन करने वाला उपयोगकर्ता Google खाते को लिंक कर सकता है और भविष्य में किसी भी विधि से साइन इन कर सकता है। या, कोई अनाम उपयोगकर्ता किसी Facebook खाते को लिंक कर सकता है और फिर बाद में, आपके ऐप का उपयोग जारी रखने के लिए Facebook से साइन इन कर सकता है।

शुरू करने से पहले

अपने ऐप में दो या अधिक प्रमाणीकरण प्रदाताओं (संभवतः अनाम प्रमाणीकरण सहित) के लिए समर्थन जोड़ें।

प्रमाणीकरण प्रदाता क्रेडेंशियल्स को किसी मौजूदा उपयोगकर्ता खाते से लिंक करने के लिए:

  1. किसी भी प्रमाणीकरण प्रदाता या विधि का उपयोग करके उपयोगकर्ता में साइन इन करें।
  2. नए प्रमाणीकरण प्रदाता के लिए साइन-इन प्रवाह को firebase::auth::Auth::SignInWithCredential विधियों में से किसी एक को कॉल करने तक, लेकिन इसमें शामिल नहीं है। उदाहरण के लिए, उपयोगकर्ता का Google आईडी टोकन, फेसबुक एक्सेस टोकन, या ईमेल और पासवर्ड प्राप्त करें।
  3. नए प्रमाणीकरण प्रदाता के लिए एक firebase::auth::Credential प्राप्त करें:

    Google साइन-इन
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    
    Facebook लॉग इन
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    
    2 ईमेल-पासवर्ड साइन-इन
    firebase::auth::Credential credential =
        firebase::auth::EmailAuthProvider::GetCredential(email, password);
    
  4. साइन-इन किए गए उपयोगकर्ता की LinkWithCredential विधि में firebase::auth::Credential ऑब्जेक्ट पास करें:

    // Link the new credential to the currently active user.
    firebase::auth::User* current_user = auth->current_user();
    firebase::Future<firebase::auth::User*> result =
        current_user->LinkWithCredential(credential);
    

    यदि क्रेडेंशियल पहले से ही किसी अन्य उपयोगकर्ता खाते से लिंक हैं, तो LinkWithCredential पर कॉल विफल हो जाएगी। इस स्थिति में, आपको अपने ऐप के लिए उपयुक्त खातों और संबद्ध डेटा को मर्ज करने का प्रबंधन करना चाहिए:

    // Gather data for the currently signed in User.
    firebase::auth::User* current_user = auth->current_user();
    std::string current_email = current_user->email();
    std::string current_provider_id = current_user->provider_id();
    std::string current_display_name = current_user->display_name();
    std::string current_photo_url = current_user->photo_url();
    
    // Sign in with the new credentials.
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCredential(credential);
    
    // To keep example simple, wait on the current thread until call completes.
    while (result.status() == firebase::kFutureStatusPending) {
      Wait(100);
    }
    
    // The new User is now active.
    if (result.error() == firebase::auth::kAuthErrorNone) {
      firebase::auth::User* new_user = *result.result();
    
      // Merge new_user with the user in details.
      // ...
      (void)new_user;
    }
    

यदि LinkWithCredential को कॉल सफल होती है, तो उपयोगकर्ता अब किसी भी लिंक किए गए प्रमाणीकरण प्रदाता का उपयोग करके साइन इन कर सकता है और उसी Firebase डेटा तक पहुंच बना सकता है।

आप किसी प्रमाणीकरण प्रदाता को किसी खाते से अनलिंक कर सकते हैं, ताकि उपयोगकर्ता अब उस प्रदाता के साथ साइन इन न कर सके।

किसी उपयोगकर्ता खाते से प्रमाणीकरण प्रदाता को अनलिंक करने के लिए, प्रदाता आईडी को Unlink विधि में पास करें। आप ProviderData पर कॉल करके किसी उपयोगकर्ता से लिंक किए गए प्रमाणीकरण प्रदाताओं की प्रदाता आईडी प्राप्त कर सकते हैं।

// Unlink the sign-in provider from the currently active user.
firebase::auth::User* current_user = auth->current_user();
firebase::Future<firebase::auth::User*> result =
    current_user->Unlink(providerId);