কাস্টম যাচাইকরণ সিস্টেম ও C++ ব্যবহার করে Firebase-এর সাথে যাচাইকরণ করা

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

শুরু করার আগে

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

Firebase-এর মাধ্যমে যাচাইকরণ

Auth ক্লাস হল সব API কলের গেটওয়ে।
  1. Auth ও App হেডার ফাইল যোগ করুন:
    #include <cassert>
    #include <cstdint>
    
    #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 প্রোজেক্টের অংশ হিসেবে স্টোর করা হয় এবং ব্যবহারকারী কীভাবে সাইন-ইন করেছেন তা নির্বিশেষে, আপনার প্রোজেক্টের প্রতিটি অ্যাপ জুড়ে কোনও ব্যবহারকারীকে শনাক্ত করতে ব্যবহার করা যেতে পারে।

  • আপনার অ্যাপে, আপনি 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 এবং Cloud Storage নিরাপত্তা বিধিতে, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারবেন।

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

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

auth->SignOut();