আপনি ব্যবহারকারীর ফোনে একটি SMS বার্তা পাঠিয়ে ব্যবহারকারীকে সাইন ইন করতে Firebase Authentication ব্যবহার করতে পারেন। ব্যবহারকারী এসএমএস বার্তায় থাকা একটি এককালীন কোড ব্যবহার করে সাইন ইন করে।
এই দস্তাবেজটি বর্ণনা করে যে কীভাবে Firebase SDK ব্যবহার করে একটি ফোন নম্বর সাইন-ইন ফ্লো বাস্তবায়ন করতে হয়।
আপনি শুরু করার আগে
- আপনার C++ প্রকল্পে Firebase যোগ করুন ।
- আপনি যদি এখনও আপনার অ্যাপটিকে আপনার Firebase প্রকল্পের সাথে সংযুক্ত না করে থাকেন, তাহলে Firebase কনসোল থেকে তা করুন৷
- ফোন নম্বর সাইন-ইন করার জন্য প্ল্যাটফর্মের প্রয়োজনীয়তাগুলি বুঝুন:
- ফোন নম্বর সাইন-ইন শুধুমাত্র মোবাইল প্ল্যাটফর্মের জন্য।
- iOS-এ, ফোন নম্বর সাইন-ইন করার জন্য একটি ফিজিক্যাল ডিভাইস প্রয়োজন এবং এটি কোনো সিমুলেটরে কাজ করবে না।
নিরাপত্তা উদ্বেগ
শুধুমাত্র একটি ফোন নম্বর ব্যবহার করে প্রমাণীকরণ, সুবিধাজনক হলেও, অন্যান্য উপলব্ধ পদ্ধতির তুলনায় কম নিরাপদ, কারণ একটি ফোন নম্বরের দখল ব্যবহারকারীদের মধ্যে সহজেই হস্তান্তর করা যেতে পারে। এছাড়াও, একাধিক ব্যবহারকারীর প্রোফাইল সহ ডিভাইসগুলিতে, যে কোনও ব্যবহারকারী যে এসএমএস বার্তাগুলি পেতে পারে সে ডিভাইসের ফোন নম্বর ব্যবহার করে একটি অ্যাকাউন্টে সাইন ইন করতে পারে৷
আপনি যদি আপনার অ্যাপে ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করেন, তাহলে আপনাকে আরও নিরাপদ সাইন-ইন পদ্ধতির পাশাপাশি এটি অফার করা উচিত এবং ফোন নম্বর সাইন-ইন ব্যবহার করার নিরাপত্তা ট্রেডঅফ সম্পর্কে ব্যবহারকারীদের জানানো উচিত।
আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন সক্ষম করুন
SMS এর মাধ্যমে ব্যবহারকারীদের সাইন ইন করতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন পদ্ধতি সক্রিয় করতে হবে:
- Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
- সাইন-ইন পদ্ধতি পৃষ্ঠায়, ফোন নম্বর সাইন-ইন পদ্ধতি সক্ষম করুন।
APN-এর বিজ্ঞপ্তি পাওয়া শুরু করুন (অ্যাপল প্ল্যাটফর্ম)
Apple প্ল্যাটফর্মে ফোন নম্বর প্রমাণীকরণ ব্যবহার করতে, আপনার অ্যাপকে অবশ্যই Firebase থেকে APN-এর বিজ্ঞপ্তি পেতে সক্ষম হতে হবে। আপনি যখন কোনও ব্যবহারকারীর ফোন নম্বর দিয়ে প্রথমবার কোনও ডিভাইসে সাইন ইন করেন, Firebase Authentication ডিভাইসে একটি নীরব পুশ বিজ্ঞপ্তি পাঠায় যে ফোন নম্বর সাইন-ইন অনুরোধটি আপনার অ্যাপ থেকে এসেছে তা যাচাই করতে। (এই কারণে, ফোন নম্বর সাইন-ইন একটি সিমুলেটরে ব্যবহার করা যাবে না।)
Firebase Authentication সাথে ব্যবহারের জন্য APN-এর বিজ্ঞপ্তি সক্ষম করতে:
- এক্সকোডে, আপনার প্রকল্পের জন্য পুশ বিজ্ঞপ্তিগুলি সক্ষম করুন ।
Firebase-এ আপনার APN-এর শংসাপত্র আপলোড করুন। আপনার যদি ইতিমধ্যেই একটি APNs শংসাপত্র না থাকে, তাহলে Apple বিকাশকারী সদস্য কেন্দ্রে একটি তৈরি করা নিশ্চিত করুন৷
Firebase কনসোলে আপনার প্রকল্পের ভিতরে, গিয়ার আইকন নির্বাচন করুন, প্রকল্প সেটিংস নির্বাচন করুন এবং তারপরে ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন৷
আপনার ডেভেলপমেন্ট সার্টিফিকেট, আপনার প্রোডাকশন সার্টিফিকেট বা উভয়ের জন্য আপলোড সার্টিফিকেট বোতামটি নির্বাচন করুন। অন্তত একটি প্রয়োজন.
প্রতিটি শংসাপত্রের জন্য, .p12 ফাইলটি নির্বাচন করুন এবং পাসওয়ার্ড প্রদান করুন, যদি থাকে। নিশ্চিত করুন যে এই শংসাপত্রের বান্ডেল আইডি আপনার অ্যাপের বান্ডেল আইডির সাথে মেলে। সংরক্ষণ নির্বাচন করুন।
ব্যবহারকারীর ফোনে একটি যাচাইকরণ কোড পাঠান
ফোন নম্বর সাইন-ইন শুরু করতে, ব্যবহারকারীকে একটি ইন্টারফেস উপস্থাপন করুন যা তাদের ফোন নম্বর প্রদান করতে অনুরোধ করে, এবং তারপর PhoneAuthProvider::VerifyPhoneNumber
এ কল করে অনুরোধ করে যে Firebase ব্যবহারকারীর ফোনে SMS এর মাধ্যমে একটি প্রমাণীকরণ কোড পাঠাবে:
ব্যবহারকারীর ফোন নম্বর পান।
আইনি প্রয়োজনীয়তা পরিবর্তিত হয়, কিন্তু একটি সর্বোত্তম অনুশীলন হিসাবে এবং আপনার ব্যবহারকারীদের জন্য প্রত্যাশা সেট করার জন্য, আপনাকে তাদের জানানো উচিত যে যদি তারা ফোন সাইন-ইন ব্যবহার করে, তাহলে তারা যাচাইকরণের জন্য একটি SMS বার্তা পেতে পারে এবং মান দর প্রযোজ্য।
-
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
কল করা হয়, আপনি ব্যবহারকারীকে SMS বার্তায় যাচাইকরণ কোডটি টাইপ করার জন্য অনুরোধ করতে পারেন।
অন্যদিকে, যদি VerifyPhoneNumber
এ কলের ফলে OnVerificationCompleted
হয়, তাহলে স্বয়ংক্রিয় যাচাইকরণ সফল হয়েছে এবং আপনার কাছে এখন একটি PhoneAuthCredential
থাকবে যার সাথে আপনি নীচে বর্ণিত হিসাবে ব্যবহার করতে পারেন।
যাচাইকরণ কোড দিয়ে ব্যবহারকারীকে সাইন ইন করুন
ব্যবহারকারী আপনার অ্যাপটিকে এসএমএস বার্তা থেকে যাচাইকরণ কোড প্রদান করার পরে, যাচাইকরণ কোড এবং যাচাইকরণ আইডি থেকে একটি 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::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();