এন্ড-টু-এন্ড সাইন-ইন ফ্লো সম্পূর্ণ করতে, Firebase SDK ব্যবহার করে আপনার অ্যাপে ওয়েব-ভিত্তিক জেনেরিক OAuth লগ-ইন ইন্টিগ্রেট করে, আপনি Microsoft Azure Active Directory-র মতো OAuth প্রদানকারীর মাধ্যমে Firebase-এর সাথে আপনার ব্যবহারকারীদের যাচাই করিয়ে নিতে পারবেন। এই ফ্লোতে ফোন-ভিত্তিক Firebase SDK ব্যবহার করতে হয় বলে এটি শুধুমাত্র Android ও Apple প্ল্যাটফর্মে কাজ করে।
শুরু করার আগে
- আপনার C++ প্রোজেক্টে Firebase যোগ করুন।
- Firebase কনসোলে গিয়ে নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
- সাইন-ইন পদ্ধতি ট্যাবে, Microsoft সাইন-ইন প্রদানকারীকে চালু করুন।
-
প্রোভাইডার কনফিগারেশনে সেই প্রোভাইডারের
ডেভেলপার কনসোল থেকে ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেট যোগ করুন:
- Microsoft OAuth ক্লায়েন্ট রেজিস্টার করতে, দ্রুত শুরু: Azure Active Directory v2.0 এন্ডপয়েন্টের সাথে অ্যাপ রেজিস্টার করুন লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করুন। মনে রাখবেন, এই এন্ডপয়েন্ট Microsoft ব্যক্তিগত অ্যাকাউন্ট এবং Azure Active Directory অ্যাকাউন্ট ব্যবহার করে সাইন-ইন করার সুবিধা দেয়। Azure Active Directory v2.0 সম্পর্কে আরও জানুন।
-
এইসব পরিষেবা প্রদানকারীর সাথে অ্যাপ রেজিস্টার করার সময়, আপনার অ্যাপের জন্য রিডাইরেক্ট
ডোমেন হিসেবে আপনার প্রোজেক্টের জন্য
*.firebaseapp.comডোমেন রেজিস্টার করতে ভুলবেন না।
- সেভ করুন বিকল্পে ক্লিক করুন।
firebase::auth::Auth ক্লাসে অ্যাক্সেস করা
Auth ক্লাস হল সব API কলের গেটওয়ে।
- Auth ও App হেডার ফাইল যোগ করুন:
#include <cassert> #include <cstdint> #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-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করতে, এইসব ধাপ অনুসরণ করুন:
Microsoft-এর জন্য উপযুক্ত প্রোভাইডার আইডির সাথে কনফিগার করা
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";Microsoft যেসব প্যারামিটার সমর্থন করে, সেগুলি দেখতে Microsoft OAuth ডকুমেন্টেশন দেখুন। মনে রাখবেন, আপনি Firebase-এর প্রয়োজনীয় প্যারামিটার
setCustomParameters()-এর সাথে পাস করতে পারবেন না। এইসব প্যারামিটার হল 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");আরও জানতে, Microsoft-এর অনুমতি ও সম্মতি সংক্রান্ত ডকুমেন্টেশন দেখুন।
আপনার প্রদানকারীর ডেটা কনফিগার করা হয়ে গেলে, সেটি ব্যবহার করে
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);আপনার অ্যাপ্লিকেশন হয়ত অপেক্ষা করবে অথবা ভবিষ্যতে কলব্যাক রেজিস্টার করবে ।
পরবর্তী ধাপ
কোনও ব্যবহারকারী প্রথমবার সাইন-ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং ক্রেডেনশিয়ালের সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর বা ব্যবহারকারী যে তথ্য দিয়ে সাইন-ইন করেছেন তা প্রদানকারীর তথ্য। এই নতুন অ্যাকাউন্ট আপনার 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();