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

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

শুরু করার আগে

  1. আপনার C++ প্রজেক্টে Firebase যোগ করুন
  2. Firebase কনসোলে, Security > Authentication- এ যান।
  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 "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 ডকুমেন্টেশন দেখুন। মনে রাখবেন যে আপনি custom_parameters() এর সাথে Firebase-এর প্রয়োজনীয় প্যারামিটারগুলো পাস করতে পারবেন না। এই প্যারামিটারগুলো হলো client_id , redirect_uri , response_type , scope এবং state

  3. ঐচ্ছিক : profile এবং email ছাড়াও অতিরিক্ত OAuth 2.0 স্কোপ উল্লেখ করুন যা আপনি অথেনটিকেশন প্রোভাইডারের কাছ থেকে অনুরোধ করতে চান। যদি আপনার অ্যাপ্লিকেশনের Yahoo API থেকে ব্যক্তিগত ব্যবহারকারীর ডেটা অ্যাক্সেসের প্রয়োজন হয়, তাহলে আপনাকে Yahoo ডেভেলপার কনসোলের 'API Permissions'- এর অধীনে Yahoo API-এর জন্য অনুমতি অনুরোধ করতে হবে। অনুরোধ করা OAuth স্কোপগুলো অবশ্যই অ্যাপের API পারমিশনে আগে থেকে কনফিগার করা স্কোপগুলোর সাথে হুবহু মিলতে হবে। উদাহরণস্বরূপ, যদি ব্যবহারকারীর কন্টাক্টে রিড/রাইট অ্যাক্সেস অনুরোধ করা হয় এবং তা অ্যাপের API পারমিশনে আগে থেকে কনফিগার করা থাকে, তাহলে রিড-অনলি 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);
    

    এরপর আপনার অ্যাপ্লিকেশনটি অপেক্ষা করতে পারে অথবা 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();