ব্যবহারকারীর ফোনে এসএমএস মেসেজ পাঠিয়ে আপনি Firebase Authentication ব্যবহার করে কোনও ব্যবহারকারীকে সাইন-ইন করাতে পারবেন। ব্যবহারকারী এসএমএস মেসেজে থাকা একবার ব্যবহারের কোড ব্যবহার করে সাইন-ইন করেন।
এই ডকুমেন্টে Firebase SDK ব্যবহার করে কীভাবে ফোন নম্বর দিয়ে সাইন-ইন করার প্রক্রিয়া প্রয়োগ করতে হয় তা বর্ণনা করা হয়েছে।
শুরু করার আগে
- আপনার C++ প্রোজেক্টে Firebase যোগ করুন।
- আপনি এখনও Firebase প্রোজেক্টের সাথে অ্যাপ কানেক্ট না করে থাকলে, এটি Firebase কনসোল থেকে করুন।
- ফোন নম্বর দিয়ে সাইন-ইন করার জন্য প্ল্যাটফর্মের প্রয়োজনীয়তা সম্পর্কে জানুন:
- ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা শুধুমাত্র মোবাইল প্ল্যাটফর্মের জন্য উপলভ্য।
- iOS-এ, ফোন নম্বর দিয়ে সাইন-ইন করার জন্য ফিজিক্যাল ডিভাইস প্রয়োজন এবং এটি সিমুলেটরে কাজ করে না।
নিরাপত্তা সংক্রান্ত উদ্বেগ
শুধুমাত্র ফোন নম্বর ব্যবহার করে যাচাইকরণ সুবিধাজনক হলেও, অন্যান্য উপলভ্য পদ্ধতির তুলনায় কম সুরক্ষিত কারণ ফোন নম্বরের মালিকানা ব্যবহারকারীদের মধ্যে সহজেই ট্রান্সফার করা যেতে পারে। এছাড়াও, একাধিক ব্যবহারকারীর প্রোফাইল সহ ডিভাইসে, যে কোনও ব্যবহারকারী এসএমএস মেসেজ পেতে পারেন এবং ডিভাইসের ফোন নম্বর ব্যবহার করে অ্যাকাউন্টে সাইন-ইন করতে পারেন।
আপনার অ্যাপে ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করলে, আপনাকে আরও সুরক্ষিত সাইন-ইন পদ্ধতির পাশাপাশি এটি অফার করতে হবে এবং ফোন নম্বর দিয়ে সাইন-ইন করার ক্ষেত্রে নিরাপত্তা সংক্রান্ত আপস সম্পর্কে ব্যবহারকারীদের জানাতে হবে।
আপনার Firebase প্রোজেক্টের জন্য ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা চালু করা
এসএমএসের মাধ্যমে ব্যবহারকারীদের সাইন-ইন করতে দিতে, আপনাকে প্রথমে Firebase প্রোজেক্টের জন্য ফোন নম্বর দিয়ে সাইন-ইন পদ্ধতি চালু করতে হবে:
- Firebase কনসোলে, নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
- সাইন-ইন পদ্ধতি ট্যাবে, ফোন সাইন-ইন প্রোভাইডার চালু করুন।
-
আপনি যেসব অঞ্চলে এসএমএস মেসেজ পাঠাতে দিতে বা দিতে চান না, সেইসব অঞ্চলের জন্য একটি নীতি সেট করুন।
এসএমএস অঞ্চল সংক্রান্ত নীতি সেট করলে, আপনার
অ্যাপকে এসএমএস অপব্যবহার থেকে রক্ষা করতে সাহায্য করতে পারে। নতুন প্রোজেক্টের ক্ষেত্রে, ডিফল্ট নীতি কোনও অঞ্চলকে অনুমতি দেয় না।
- Firebase কনসোলে, নিরাপত্তা > অনুমোদন > সেটিংস ট্যাব বিকল্পে যান।
- এসএমএস অঞ্চল নীতি বিভাগে, আপনার এসএমএস অঞ্চল নীতি সেট-আপ করুন।
APNs বিজ্ঞপ্তি (Apple প্ল্যাটফর্ম) পাওয়া শুরু করুন
Apple প্ল্যাটফর্মে ফোন নম্বর যাচাইকরণ ব্যবহার করতে, আপনার অ্যাপকে Firebase থেকে APNs বিজ্ঞপ্তি পেতে হবে। কোনও ডিভাইসে ব্যবহারকারীর ফোন নম্বর দিয়ে প্রথমবার সাইন-ইন করলে, Firebase Authentication একটি সাইলেন্ট পুশ বিজ্ঞপ্তি পাঠায়। এর মাধ্যমে যাচাই করা হয় যে ফোন নম্বর দিয়ে সাইন-ইন করার অনুরোধটি আপনার অ্যাপ থেকেই এসেছে। (এই কারণে, ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা সিমুলেটরে ব্যবহার করা যায় না।)
Firebase Authentication-এর সাথে ব্যবহারের জন্য APNs বিজ্ঞপ্তি চালু করতে:
- Xcode-এ, আপনার প্রজেক্টের জন্য পুশ বিজ্ঞপ্তি চালু করুন।
Firebase-এ আপনার APNs সার্টিফিকেট আপলোড করুন। আপনার কাছে আগে থেকেই APNs সার্টিফিকেট না থাকলে, নিশ্চিত করুন যে আপনি Apple Developer মেম্বার সেন্টারে একটি তৈরি করেছেন।
-
Firebase কনসোলে গিয়ে
সেটিংস > সাধারণ বিকল্পে যান। তারপর, ক্লাউড মেসেজিং ট্যাব বিকল্পে ক্লিক করুন। - আপনার ডেভেলপমেন্ট সার্টিফিকেট, প্রোডাকশন সার্টিফিকেট বা দু'টির জন্যই সার্টিফিকেট আপলোড করুন বিকল্পে ক্লিক করুন। অন্তত একটি প্রয়োজন।
-
প্রতিটি সার্টিফিকেটের জন্য,
.p12ফাইল বেছে নিন এবং কোনও পাসওয়ার্ড থাকলে সেটি দিন। এই সার্টিফিকেটের বান্ডেল আইডি আপনার অ্যাপের বান্ডেল আইডির সাথে ম্যাচ করছে কিনা তা নিশ্চিত করুন। সেভ করুন বিকল্পে ক্লিক করুন।
-
Firebase কনসোলে গিয়ে
ব্যবহারকারীর ফোনে যাচাইকরণ কোড পাঠানো
ফোন নম্বর দিয়ে সাইন-ইন শুরু করতে, ব্যবহারকারীকে এমন একটি ইন্টারফেস দেখান যা তাকে
ফোন নম্বর দিতে প্রম্পট করে এবং তারপর Firebase-কে
ব্যবহারকারীর ফোনে এসএমএস পাঠিয়ে যাচাইকরণ কোড
পাঠানোর অনুরোধ করতে PhoneAuthProvider::VerifyPhoneNumber কল করুন:
-
ব্যবহারকারীর ফোন নম্বর পান।
আইনি প্রয়োজনীয়তা আলাদা আলাদা হয়, তবে পেশাদার পদ্ধতি হিসেবে এবং আপনার ব্যবহারকারীদের প্রত্যাশা সেট করতে, তাদের জানানো উচিত যে তারা ফোন নম্বর দিয়ে সাইন-ইন করলে, যাচাইকরণের জন্য তারা একটি এসএমএস মেসেজ পেতে পারেন এবং স্ট্যান্ডার্ড রেট প্রযোজ্য হবে।
PhoneAuthProvider::VerifyPhoneNumber-কে কল করো, ব্যবহারকারীর ফোন নম্বর তাকে দাও। আপনিclass PhoneListener : public PhoneAuthProvider::Listener { public: ~PhoneListener() override {} void OnVerificationCompleted(PhoneAuthCredential credential) override { // Auto-sms-retrieval or instant validation has succeeded (Android only). // No need for the user to input the verification code manually. // `credential` can be used instead of calling GetCredential(). } void OnVerificationFailed(const std::string& error) override { // Verification code not sent. } void OnCodeSent(const std::string& verification_id, const PhoneAuthProvider::ForceResendingToken& force_resending_token) override { // Verification code successfully sent via SMS. // Show the Screen to enter the Code. // Developer may want to save that verification_id along with other app states in case // the app is terminated before the user gets the SMS verification code. } }; PhoneListener phone_listener; PhoneAuhtOptions options; options.timeout_milliseconds = kAutoVerifyTimeOut; options.phone_number = phone_number; PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth); phone_provider->VerifyPhoneNumber(options, &phone_listener);
PhoneAuthProvider::VerifyPhoneNumber-এ কল করলে, Firebase,- (iOS-এ) আপনার অ্যাপে একটি সাইলেন্ট পুশ বিজ্ঞপ্তি পাঠায়,
- নির্দিষ্ট ফোন নম্বরে একটি যাচাইকরণ কোড সহ এসএমএস মেসেজ পাঠায় এবং আপনার সম্পূর্ণতা ফাংশনে একটি যাচাইকরণ আইডি পাস করে। ব্যবহারকারীকে সাইন-ইন করানোর জন্য আপনার যাচাইকরণ কোড ও যাচাইকরণ আইডি, দুটিই লাগবে।
-
যাচাইকরণ আইডি সেভ করুন এবং আপনার অ্যাপ লোড হলে এটি রিস্টোর করুন। এটি করলে, আপনি নিশ্চিত হতে পারবেন যে আপনার অ্যাপ ব্যবহারকারী সাইন-ইন ফ্লো সম্পূর্ণ করার আগে বন্ধ হয়ে গেলেও (যেমন, এসএমএস অ্যাপে সুইচ করার সময়) আপনার কাছে এখনও একটি বৈধ যাচাইকরণ আইডি আছে।
আপনি যেকোনও উপায়ে যাচাইকরণ আইডি সেভ করে রাখতে পারেন। আপনি যদি ক্রস-প্ল্যাটফর্ম C++ ফ্রেমওয়ার্ক ব্যবহার করে লিখছেন, তাহলে এটি অ্যাপ বন্ধ করা ও রিস্টোর করার জন্য বিজ্ঞপ্তি প্রদান করবে। এইসব ইভেন্টে, আপনি যাচাইকরণ আইডি সেভ ও রিস্টোর করতে পারবেন, যথাক্রমে।
VerifyPhoneNumber-এ কল করলে আপনার লিসনারে OnCodeSent
কল করা হলে, ব্যবহারকারী এসএমএস মেসেজে যাচাইকরণ
কোডটি পেলে, আপনি তাকে সেটি টাইপ করতে বলতে পারেন।
অন্যদিকে, VerifyPhoneNumber-এ কল করলে যদি OnVerificationCompleted পাওয়া যায়, তাহলে
অটোমেটিক যাচাইকরণ সফল হয়েছে
এবং আপনি এখন একটি PhoneAuthCredential পাবেন যা আপনি নিচে
বর্ণিত পদ্ধতিতে ব্যবহার করতে পারবেন।
যাচাইকরণ কোড দিয়ে ব্যবহারকারীকে সাইন-ইন করানো
ব্যবহারকারী SMS মেসেজ থেকে যাচাইকরণ কোড আপনার অ্যাপকে দেওয়ার পরে, যাচাইকরণ কোড ও যাচাইকরণ আইডি থেকে PhoneAuthCredential
অবজেক্ট তৈরি করে এবং সেই অবজেক্টটি Auth::SignInWithCredential-এ
পাস করে ব্যবহারকারীকে সাইন-ইন করান।
- ব্যবহারকারীর থেকে যাচাইকরণ কোড পান।
- যাচাইকরণ কোড ও যাচাইকরণ আইডি থেকে
Credentialঅবজেক্ট তৈরি করুন।PhoneAuthCredential credential = phone_auth_provider->GetCredential( verification_id_.c_str(), verification_code.c_str());
Credentialঅবজেক্ট ব্যবহার করে ব্যবহারকারীকে সাইন-ইন করান:Future<User> future = auth_->SignInWithCredential(credential); future.OnCompletion( [](const Future<User*>& result, void*) { if (result.error() == kAuthErrorNone) { // Successful. // User is signed in. User user = *result.result(); // This should display the phone number. printf("Phone number: %s", user.phone_number().c_str()); // The phone number provider UID is the phone number itself. printf("Phone provider uid: %s", user.uid().c_str()); // The phone number providerID is 'phone' printf("Phone provider ID: %s", user.provider_id().c_str()); } else { // Error. printf("Sign in error: %s", result.error_message().c_str()); } }, nullptr);
পরবর্তী ধাপ
কোনও ব্যবহারকারী প্রথমবার সাইন-ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং ক্রেডেনশিয়ালের সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর বা ব্যবহারকারী যে তথ্য দিয়ে সাইন-ইন করেছেন তা প্রদানকারীর তথ্য। এই নতুন অ্যাকাউন্ট আপনার 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();