একটি কাস্টম প্রমাণীকরণ সিস্টেম এবং C++ ব্যবহার করে ফায়ারবেসের সাথে প্রমাণীকরণ করুন

ব্যবহারকারী সফলভাবে সাইন ইন করলে কাস্টম স্বাক্ষরিত টোকেন তৈরি করার জন্য আপনার অথেনটিকেশন সার্ভারটি পরিবর্তন করে আপনি একটি কাস্টম অথেনটিকেশন সিস্টেমের সাথে Firebase Authentication একীভূত করতে পারেন। আপনার অ্যাপ এই টোকেনটি গ্রহণ করে এবং ফায়ারবেসের সাথে অথেনটিকেশনের জন্য এটি ব্যবহার করে।

শুরু করার আগে

  1. আপনার C++ প্রজেক্টে Firebase যোগ করুন
  2. আপনার প্রোজেক্টের সার্ভার কীগুলো সংগ্রহ করুন:
    1. Firebase কনসোলে, এখানে যান > পরিষেবা অ্যাকাউন্ট ট্যাব
    2. Firebase Admin SDK সেকশনের একদম নিচে, Generate New Private Key-তে ক্লিক করুন।
    3. নতুন সার্ভিস অ্যাকাউন্টের পাবলিক/প্রাইভেট কী পেয়ারটি আপনার কম্পিউটারে স্বয়ংক্রিয়ভাবে সেভ হয়ে যায়। এই ফাইলটি আপনার অথেনটিকেশন সার্ভারে কপি করুন।

ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

Auth ক্লাসটি সকল API কলের প্রবেশদ্বার।
  1. Auth এবং App হেডার ফাইলগুলো যোগ করুন:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. আপনার ইনিশিয়ালাইজেশন কোডে একটি firebase::App ক্লাস তৈরি করুন।
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
  3. আপনার firebase::App জন্য firebase::auth::Auth ক্লাসটি অ্যাকোয়ার করুন। App এবং Auth মধ্যে একটি এক-এক ম্যাপিং রয়েছে।
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
আপনার অথেনটিকেশন সার্ভার থেকে প্রাপ্ত টোকেনটি দিয়ে Auth::SignInWithCustomToken কল করুন।
  1. যখন ব্যবহারকারীরা আপনার অ্যাপে সাইন ইন করেন, তখন তাদের সাইন-ইন ক্রেডেনশিয়াল (যেমন, ইউজারনেম এবং পাসওয়ার্ড) আপনার অথেনটিকেশন সার্ভারে পাঠান। আপনার সার্ভার ক্রেডেনশিয়ালগুলো যাচাই করে এবং সেগুলো বৈধ হলে একটি কাস্টম টোকেন ফেরত দেয়।
  2. আপনার অথেনটিকেশন সার্ভার থেকে কাস্টম টোকেনটি পাওয়ার পর, ব্যবহারকারীকে সাইন ইন করতে সেটি Auth::SignInWithCustomToken এ পাস করুন:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
  3. আপনার প্রোগ্রামে যদি একটি আপডেট লুপ থাকে যা নিয়মিত চলে (যেমন প্রতি সেকেন্ডে ৩০ বা ৬০ বার), তাহলে আপনি প্রতিটি আপডেটের পর একবার Auth::SignInWithCustomTokenLastResult ব্যবহার করে ফলাফল পরীক্ষা করতে পারেন।
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    অথবা, যদি আপনার প্রোগ্রামটি ইভেন্ট-চালিত হয়, তাহলে আপনি Future-এ একটি কলব্যাক নিবন্ধন করতে পছন্দ করতে পারেন।

পরবর্তী পদক্ষেপ

কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি হয় এবং সেটি ব্যবহারকারীর সাইন ইন করার ক্রেডেনশিয়াল—অর্থাৎ, ইউজার নেম ও পাসওয়ার্ড, ফোন নম্বর, বা অথোরাইজেশন প্রোভাইডারের তথ্যের—সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রজেক্টের অংশ হিসেবে সংরক্ষিত থাকে এবং ব্যবহারকারী কীভাবে সাইন ইন করছেন তা নির্বিশেষে, আপনার প্রজেক্টের প্রতিটি অ্যাপে তাকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

  • আপনার অ্যাপগুলিতে, আপনি firebase::auth::User অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন।

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
  • আপনার Firebase Realtime Database and Cloud Storage Security Rules- এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

বিদ্যমান কোনো ব্যবহারকারী অ্যাকাউন্টের সাথে অথেন্টিকেশন প্রোভাইডারের ক্রেডেনশিয়াল লিঙ্ক করার মাধ্যমে আপনি ব্যবহারকারীদের একাধিক অথেন্টিকেশন প্রোভাইডার ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

কোনো ব্যবহারকারীকে সাইন আউট করতে, SignOut() কল করুন:

auth->SignOut();