C++ ব্যবহার করে একটি অ্যাকাউন্টে একাধিক প্রমাণীকরণ প্রদানকারীকে লিঙ্ক করুন

আপনি ব্যবহারকারীদের একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন, একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করে। ব্যবহারকারীরা সাইন ইন করার জন্য যে প্রমাণীকরণ প্রদানকারী ব্যবহার করুক না কেন, একই Firebase ব্যবহারকারী আইডি দ্বারা শনাক্ত করা যাবে। উদাহরণস্বরূপ, পাসওয়ার্ড দিয়ে সাইন ইন করা একজন ব্যবহারকারী ভবিষ্যতে একটি Google অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং যেকোনো পদ্ধতিতে সাইন ইন করতে পারেন। অথবা, একজন বেনামী ব্যবহারকারী একটি Facebook অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং পরে, আপনার অ্যাপ ব্যবহার চালিয়ে যেতে Facebook-এ সাইন ইন করতে পারেন।

শুরু করার আগে

আপনার অ্যাপে দুই বা ততোধিক প্রমাণীকরণ প্রদানকারীর (সম্ভবত বেনামী প্রমাণীকরণ সহ) জন্য সমর্থন যোগ করুন।

একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে auth প্রদানকারীর শংসাপত্র লিঙ্ক করতে:

  1. যেকোনো প্রমাণীকরণ প্রদানকারী বা পদ্ধতি ব্যবহার করে ব্যবহারকারীকে সাইন ইন করুন।
  2. নতুন প্রমাণীকরণ প্রদানকারীর জন্য সাইন-ইন প্রবাহ সম্পূর্ণ করুন, তবে অন্তর্ভুক্ত নয়, firebase::auth::Auth::SignInWithCredential পদ্ধতিগুলির মধ্যে একটিতে কল করা পর্যন্ত। উদাহরণস্বরূপ, ব্যবহারকারীর Google ID টোকেন, Facebook অ্যাক্সেস টোকেন, অথবা ইমেল এবং পাসওয়ার্ড পান।
  3. নতুন প্রমাণীকরণ প্রদানকারীর জন্য একটি firebase::auth::Credential পান:

    গুগল সাইন-ইন
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    ফেসবুক লগইন
    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 ডেটা অ্যাক্সেস করতে পারবেন।

একটি একক Firebase ব্যবহারকারী অ্যাকাউন্টের সাথে একাধিক প্রমাণীকরণ প্রদানকারী লিঙ্ক করা থাকতে পারে (উদাহরণস্বরূপ, ইমেল/পাসওয়ার্ড, গুগল, ফেসবুক), যা ব্যবহারকারীকে বিভিন্ন পদ্ধতির মাধ্যমে একই 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);

সমস্যা সমাধান

একাধিক অ্যাকাউন্ট লিঙ্ক করার সময় যদি আপনি ত্রুটির সম্মুখীন হন, তাহলে যাচাইকৃত ইমেল ঠিকানাগুলিতে ডকুমেন্টেশন দেখুন।