Yahoo ও C++ ব্যবহার করে যাচাইকরণ

এন্ড-টু-এন্ড সাইন-ইন ফ্লো সম্পূর্ণ করতে, আপনি Firebase SDK ব্যবহার করে আপনার অ্যাপে ওয়েব-ভিত্তিক জেনেরিক OAuth লগ-ইন ইন্টিগ্রেট করার মাধ্যমে Yahoo-এর মতো OAuth প্রদানকারীর সাহায্যে আপনার ব্যবহারকারীদের Firebase-এর সাথে যাচাই করিয়ে নিতে পারবেন। এই ফ্লোতে ফোন-ভিত্তিক Firebase SDK ব্যবহার করতে হয় বলে এটি শুধুমাত্র Android ও Apple প্ল্যাটফর্মে কাজ করে।

শুরু করার আগে

  1. আপনার C++ প্রোজেক্টে Firebase যোগ করুন।
  2. Firebase কনসোলে গিয়ে নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
  3. সাইন-ইন পদ্ধতি ট্যাবে, Yahoo সাইন-ইন প্রদানকারীকে চালু করুন।
  4. প্রোভাইডার কনফিগারেশনে সেই প্রোভাইডারের ডেভেলপার কনসোল থেকে ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেট যোগ করুন:
    1. Yahoo OAuth ক্লায়েন্ট রেজিস্টার করতে, Yahoo ডেভেলপার ডকুমেন্টেশনে Yahoo-এর সাথে ওয়েব অ্যাপ্লিকেশন রেজিস্টার করা সংক্রান্ত তথ্য অনুসরণ করুন।

      দুটি OpenID Connect API অনুমতি বেছে নিতে ভুলবেন না: profile এবং email.

    2. এইসব পরিষেবা প্রদানকারীর সাথে অ্যাপ রেজিস্টার করার সময়, আপনার অ্যাপের জন্য রিডাইরেক্ট ডোমেন হিসেবে আপনার প্রোজেক্টের জন্য *.firebaseapp.com ডোমেন রেজিস্টার করতে ভুলবেন না।
  5. সেভ করুন বিকল্পে ক্লিক করুন।

firebase::auth::Auth ক্লাসে অ্যাক্সেস করা

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);

Firebase SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করা

Firebase SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করতে, এইসব ধাপ অনুসরণ করুন:

  1. Yahoo-এর জন্য উপযুক্ত প্রোভাইডার আইডি দিয়ে কনফিগার করা FederatedOAuthProviderData-এর একটি ইনস্ট্যান্স তৈরি করুন।

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. ঐচ্ছিক: OAuth অনুরোধের সাথে আপনি পাঠাতে চান এমন অতিরিক্ত কাস্টম OAuth প্যারামিটার নির্দিষ্ট করুন।

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    Yahoo-এর ক্ষেত্রে কাজ করে এমন প্যারামিটার সম্পর্কে জানতে, Yahoo OAuth ডকুমেন্টেশন দেখুন। মনে রাখবেন, আপনি Firebase-এর প্রয়োজনীয় প্যারামিটার custom_parameters()-এর সাথে পাস করতে পারবেন না। এইসব প্যারামিটার হল client_id, redirect_uri, response_type, scope ও state.

  3. ঐচ্ছিক: যাচাইকরণ প্রদানকারীর কাছে অনুরোধ করতে চান এমন profile এবং email-এর বাইরে অতিরিক্ত OAuth 2.0 স্কোপ নির্দিষ্ট করুন। আপনার অ্যাপ্লিকেশনের Yahoo API থেকে ব্যক্তিগত ব্যবহারকারীর ডেটা অ্যাক্সেস করার প্রয়োজন হলে, আপনাকে Yahoo ডেভেলপার কনসোলে API অনুমতির অধীনে Yahoo API-কে অনুমতি দেওয়ার অনুরোধ জানাতে হবে। অ্যাপের API অনুমতিতে আগে থেকে কনফিগার করা OAuth স্কোপের সাথে অনুরোধ করা স্কোপ হুবহু মিলতে হবে। যেমন, ব্যবহারকারীর পরিচিতি অ্যাক্সেস করার জন্য read/write অনুমতি চাওয়া হলে এবং অ্যাপের API অনুমতিতে আগে থেকে কনফিগার করা থাকলে, readonly OAuth স্কোপের sdct-r পরিবর্তে sdct-w পাস করতে হবে। অন্যথায়,ফ্লোটি সম্পূর্ণ হবে না এবং গ্রাহককে সমস্যা সংক্রান্ত মেসেজ দেখানো হবে।

    // Request access to Yahoo Mail API.
    provider_data.scopes.push_back("mail-r");
    // This must be preconfigured in the app's API permissions.
    provider_data.scopes.push_back("sdct-w");
    

    আরও জানতে, Yahoo স্কোপ ডকুমেন্টেশন দেখুন।

  4. আপনার প্রদানকারীর ডেটা কনফিগার করা হয়ে গেলে, এটি ব্যবহার করে একটি FederatedOAuthProvider তৈরি করুন।

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Auth প্রদানকারী অবজেক্ট ব্যবহার করে Firebase-এর মাধ্যমে যাচাই করিয়ে নিন। মনে রাখবেন যে অন্যান্য FirebaseAuth অপারেশনের মতো নয়, এটি আপনার UI-এর নিয়ন্ত্রণ নেবে এবং একটি ওয়েব ভিউ পপ-আপ করবে যেখানে ব্যবহারকারী তার ক্রেডেনশিয়াল লিখতে পারবেন।

    সাইন-ইন ফ্লো শুরু করতে, SignInWithProvider কল করুন:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    আপনার অ্যাপ্লিকেশন হয়ত অপেক্ষা করবে অথবা Future-এ একটি কলব্যাক রেজিস্টার করবে।

  6. উপরের উদাহরণগুলি সাইন-ইন ফ্লোয়ের উপর ফোকাস করলেও, আপনার কাছে LinkWithProvider ব্যবহার করে আগে থেকে থাকা ব্যবহারকারীর সাথে Yahoo প্রদানকারীকে লিঙ্ক করার ক্ষমতাও আছে। যেমন, আপনি একই ব্যবহারকারীর সাথে একাধিক পরিষেবা প্রদানকারীকে লিঙ্ক করতে পারেন, যাতে তিনি যেকোনও একটির মাধ্যমে সাইন-ইন করতে পারেন।

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. ReauthenticateWithProvider-এর সাথে একই প্যাটার্ন ব্যবহার করা যেতে পারে, যা সংবেদনশীল অপারেশনের জন্য নতুন ক্রেডেনশিয়াল পেতে ব্যবহার করা যেতে পারে, এর জন্য সাম্প্রতিক লগ-ইন প্রয়োজন।

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    আপনার অ্যাপ্লিকেশন হয়ত অপেক্ষা করবে অথবা ভবিষ্যতে কলব্যাক রেজিস্টার করবে ।

পরবর্তী ধাপ

কোনও ব্যবহারকারী প্রথমবার সাইন-ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং ক্রেডেনশিয়ালের সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর বা ব্যবহারকারী যে তথ্য দিয়ে সাইন-ইন করেছেন তা প্রদানকারীর তথ্য। এই নতুন অ্যাকাউন্ট আপনার 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();