সম্পূর্ণ সাইন-ইন প্রক্রিয়াটি সম্পন্ন করার জন্য, আপনি আপনার অ্যাপে ফায়ারবেস এসডিকে (Firebase SDK) ব্যবহার করে ওয়েব-ভিত্তিক জেনেরিক ওঅথ লগইন (web-based generic OAuth Login) ইন্টিগ্রেট করার মাধ্যমে মাইক্রোসফট অ্যাজুর অ্যাক্টিভ ডিরেক্টরি (Microsoft Azure Active Directory)-এর মতো ওঅথ প্রোভাইডার ব্যবহার করে ব্যবহারকারীদের ফায়ারবেসের সাথে অথেন্টিকেট করার সুযোগ দিতে পারেন। যেহেতু এই প্রক্রিয়াটির জন্য ফোন-ভিত্তিক ফায়ারবেস এসডিকে (phone-based Firebase SDKs) ব্যবহার করতে হয়, তাই এটি শুধুমাত্র অ্যান্ড্রয়েড এবং অ্যাপল প্ল্যাটফর্মে সমর্থিত।
শুরু করার আগে
- আপনার C++ প্রজেক্টে Firebase যোগ করুন ।
- Firebase কনসোলে, Security > Authentication- এ যান।
- সাইন-ইন পদ্ধতি ট্যাবে, মাইক্রোসফট সাইন-ইন প্রোভাইডারটি সক্রিয় করুন।
- সেই প্রোভাইডারের ডেভেলপার কনসোল থেকে ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট প্রোভাইডার কনফিগারেশনে যোগ করুন:
- একটি Microsoft OAuth ক্লায়েন্ট রেজিস্টার করতে, "Quickstart: Register an app with the Azure Active Directory v2.0 endpoint" -এ দেওয়া নির্দেশাবলী অনুসরণ করুন। মনে রাখবেন যে এই এন্ডপয়েন্টটি Microsoft ব্যক্তিগত অ্যাকাউন্টের পাশাপাশি Azure Active Directory অ্যাকাউন্ট ব্যবহার করেও সাইন-ইন সমর্থন করে। Azure Active Directory v2.0 সম্পর্কে আরও জানুন।
- এই প্রোভাইডারদের কাছে অ্যাপ নিবন্ধন করার সময়, আপনার অ্যাপের রিডাইরেক্ট ডোমেইন হিসেবে আপনার প্রোজেক্টের জন্য
*.firebaseapp.comডোমেইনটি নিবন্ধন করতে ভুলবেন না।
- সংরক্ষণ করুন- এ ক্লিক করুন।
firebase::auth::Auth ক্লাস অ্যাক্সেস করুন
Auth ক্লাসটি সকল API কলের প্রবেশদ্বার।- Auth এবং App হেডার ফাইলগুলো যোগ করুন:
#include "firebase/app.h" #include "firebase/auth.h"
- আপনার ইনিশিয়ালাইজেশন কোডে একটি
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__)
- আপনার
firebase::Appজন্যfirebase::auth::Authক্লাসটি অ্যাকোয়ার করুন।AppএবংAuthমধ্যে একটি এক-এক ম্যাপিং রয়েছে।firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Firebase SDK দিয়ে সাইন-ইন প্রক্রিয়াটি পরিচালনা করুন।
Firebase SDK ব্যবহার করে সাইন-ইন প্রক্রিয়াটি পরিচালনা করতে, এই ধাপগুলো অনুসরণ করুন:
মাইক্রোসফ্টের জন্য উপযুক্ত প্রোভাইডার আইডি দিয়ে কনফিগার করা একটি
FederatedOAuthProviderDataইনস্ট্যান্স তৈরি করুন।firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);ঐচ্ছিক : OAuth অনুরোধের সাথে আপনি যে অতিরিক্ত কাস্টম OAuth প্যারামিটারগুলো পাঠাতে চান, তা নির্দিষ্ট করুন।
// Prompt user to re-authenticate to Microsoft. provider_data.custom_parameters["prompt"] = "login"; // Target specific email with login hint. provider_data.custom_parameters["login_hint"] = "user@firstadd.onmicrosoft.com";মাইক্রোসফ্ট যে প্যারামিটারগুলো সমর্থন করে, সেগুলোর জন্য মাইক্রোসফ্ট OAuth ডকুমেন্টেশন দেখুন। মনে রাখবেন যে আপনি
setCustomParameters()এর সাথে Firebase-এর প্রয়োজনীয় প্যারামিটারগুলো পাস করতে পারবেন না। এই প্যারামিটারগুলো হলো client_id , response_type , redirect_uri , state , scope এবং response_mode ।শুধুমাত্র একটি নির্দিষ্ট Azure AD টেন্যান্টের ব্যবহারকারীদের অ্যাপ্লিকেশনে সাইন ইন করার অনুমতি দিতে, Azure AD টেন্যান্টের ফ্রেন্ডলি ডোমেইন নেম অথবা টেন্যান্টটির GUID আইডেন্টিফায়ার ব্যবহার করা যেতে পারে। কাস্টম প্যারামিটার অবজেক্টে 'টেন্যান্ট' ফিল্ডটি উল্লেখ করে এটি করা যায়।
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". provider_data.custom_parameters["tenant"] ="TENANT_ID";ঐচ্ছিক : বেসিক প্রোফাইলের বাইরে অতিরিক্ত OAuth 2.0 স্কোপগুলো নির্দিষ্ট করুন, যেগুলো আপনি অথেনটিকেশন প্রোভাইডারের কাছ থেকে অনুরোধ করতে চান।
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");আরও জানতে, মাইক্রোসফ্ট পারমিশন এবং কনসেন্ট ডকুমেন্টেশন দেখুন।
একবার আপনার প্রোভাইডার ডেটা কনফিগার করা হয়ে গেলে, সেটি ব্যবহার করে একটি
FederatedOAuthProviderতৈরি করুন।// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);Auth প্রোভাইডার অবজেক্ট ব্যবহার করে Firebase-এর সাথে প্রমাণীকরণ করুন। উল্লেখ্য যে, অন্যান্য FirebaseAuth অপারেশনের মতো নয়, এটি একটি ওয়েব ভিউ পপ-আপ করে আপনার UI-এর নিয়ন্ত্রণ নেবে, যেখানে ব্যবহারকারী তার ক্রেডেনশিয়াল প্রবেশ করাতে পারবেন।
সাইন ইন প্রক্রিয়া শুরু করতে,
SignInWithProviderকল করুন:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);এরপর আপনার অ্যাপ্লিকেশনটি অপেক্ষা করতে পারে অথবা Future-এ একটি কলব্যাক রেজিস্টার করতে পারে ।
OAuth অ্যাক্সেস টোকেন ব্যবহার করে আপনি Microsoft Graph API-কে কল করতে পারেন।
Firebase Auth দ্বারা সমর্থিত অন্যান্য প্রদানকারীদের থেকে ভিন্ন, Microsoft কোনো ফটো URL প্রদান করে না এবং এর পরিবর্তে, প্রোফাইল ফটোর বাইনারি ডেটা Microsoft Graph API-এর মাধ্যমে অনুরোধ করতে হয়।
যদিও উপরের উদাহরণগুলো সাইন-ইন প্রক্রিয়ার উপর আলোকপাত করে, আপনার কাছে
LinkWithProviderব্যবহার করে একজন বিদ্যমান ব্যবহারকারীর সাথে একটি Microsoft Azure Active Directory প্রোভাইডার লিঙ্ক করার ক্ষমতাও রয়েছে। উদাহরণস্বরূপ, আপনি একই ব্যবহারকারীর সাথে একাধিক প্রোভাইডার লিঙ্ক করতে পারেন, যা তাকে যেকোনো একটি দিয়ে সাইন-ইন করার সুযোগ দেবে।firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);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();