C++ का इस्तेमाल करके, पुष्टि करने वाली एक से ज़्यादा कंपनियों को किसी खाते से लिंक करें

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

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

अपने ऐप्लिकेशन में, पुष्टि करने की सेवा देने वाली दो या उससे ज़्यादा कंपनियों के लिए सहायता जोड़ें. इसमें गुमनाम तरीके से पुष्टि करने की सुविधा भी शामिल हो सकती है.

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

  1. उपयोगकर्ता को किसी भी पुष्टि करने वाले प्रोवाइडर या तरीके का इस्तेमाल करके साइन इन करें.
  2. पुष्टि करने की नई सेवा देने वाली कंपनी के लिए, साइन-इन करने की प्रोसेस पूरी करें. हालांकि, firebase::auth::Auth::SignInWithCredential तरीकों में से किसी एक को कॉल करने से पहले ही यह प्रोसेस पूरी हो जानी चाहिए. उदाहरण के लिए, उपयोगकर्ता का Google आईडी टोकन, Facebook ऐक्सेस टोकन या ईमेल और पासवर्ड पाएं.
  3. पुष्टि करने वाली नई सेवा के लिए firebase::auth::Credential पाएं:

    Google साइन-इन
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    Facebook Login
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    ईमेल और पासवर्ड की मदद से साइन-इन करना
    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::AuthResult> 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::AuthResult> result =
        auth->SignInAndRetrieveDataWithCredential(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::AuthResult> result =
    current_user.Unlink(providerId);

समस्या का हल

अगर आपको एक से ज़्यादा खाते लिंक करते समय गड़बड़ियां दिखती हैं, तो पुष्टि किए गए ईमेल पतों के बारे में जानकारी देने वाला दस्तावेज़ देखें.