C++ ব্যবহার করে অ্যাকাউন্টের সাথে একাধিক অথেন্টিকেশন পরিষেবা প্রদানকারী লিঙ্ক করা

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

শুরু করার আগে

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

আগে থেকেই আছে এমন ব্যবহারকারীর অ্যাকাউন্টের সাথে অথেন্টিকেশন পরিষেবা প্রদানকারীর ক্রেডেনশিয়াল লিঙ্ক করতে:

  1. যেকোনও যাচাইকরণ প্রদানকারী বা পদ্ধতি ব্যবহার করে ব্যবহারকারীকে সাইন-ইন করান।
  2. নতুন যাচাইকরণ প্রদানকারীর জন্য সাইন-ইন ফ্লো সম্পূর্ণ করুন, তবে এর মধ্যে firebase::auth::Auth::SignInWithCredential পদ্ধতিগুলির মধ্যে একটিকে কল করা অন্তর্ভুক্ত নয়। যেমন, ব্যবহারকারীর Google ID টোকেন, Facebook অ্যাক্সেস টোকেন অথবা ইমেল ও পাসওয়ার্ড পাওয়া।
  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);
    ইমেল-পাসওয়ার্ড দিয়ে সাইন-ইন করা
    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 ব্যবহারকারীর অ্যাকাউন্টের সাথে একাধিক যাচাইকরণ পরিষেবা প্রদানকারী লিঙ্ক করা থাকতে পারে (যেমন, ইমেল/পাসওয়ার্ড, Google, Facebook), যা ব্যবহারকারীকে বিভিন্ন পদ্ধতির মাধ্যমে একই 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);

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

একাধিক অ্যাকাউন্ট লিঙ্ক করার সময় কোনও সমস্যা হলে, যাচাই করা ইমেল আইডি সংক্রান্ত ডকুমেন্টেশন দেখুন।