একটি ফোন নম্বর এবং C++ ব্যবহার করে Firebase দিয়ে প্রমাণীকরণ করুন

আপনি ব্যবহারকারীর ফোনে একটি SMS বার্তা পাঠিয়ে Firebase Authentication ব্যবহার করে সাইন ইন করতে পারেন। ব্যবহারকারী SMS বার্তায় থাকা একটি এককালীন কোড ব্যবহার করে সাইন ইন করেন।

এই ডকুমেন্টে Firebase SDK ব্যবহার করে ফোন নম্বর সাইন-ইন ফ্লো কীভাবে বাস্তবায়ন করা যায় তা বর্ণনা করা হয়েছে।

শুরু করার আগে

  1. আপনার C++ প্রজেক্টে Firebase যোগ করুন
  2. যদি আপনি এখনও আপনার অ্যাপটি আপনার Firebase প্রকল্পের সাথে সংযুক্ত না করে থাকেন, তাহলে Firebase কনসোল থেকে তা করুন।
  3. ফোন নম্বর সাইন-ইনের জন্য প্ল্যাটফর্মের প্রয়োজনীয়তাগুলি বুঝুন:
    • ফোন নম্বর সাইন-ইন শুধুমাত্র মোবাইল প্ল্যাটফর্মের জন্য।
    • iOS-এ, ফোন নম্বর সাইন-ইন করার জন্য একটি ফিজিক্যাল ডিভাইসের প্রয়োজন হয় এবং এটি কোনও সিমুলেটরে কাজ করবে না।

নিরাপত্তা উদ্বেগ

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

যদি আপনি আপনার অ্যাপে ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করেন, তাহলে আপনার এটি আরও নিরাপদ সাইন-ইন পদ্ধতির পাশাপাশি অফার করা উচিত এবং ব্যবহারকারীদের ফোন নম্বর সাইন-ইন ব্যবহারের নিরাপত্তা বিনিময় সম্পর্কে অবহিত করা উচিত।

আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন সক্ষম করুন

SMS এর মাধ্যমে ব্যবহারকারীদের সাইন ইন করতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য ফোন নম্বর সাইন-ইন পদ্ধতি সক্ষম করতে হবে:

  1. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
  2. সাইন-ইন পদ্ধতি পৃষ্ঠায়, ফোন নম্বর সাইন-ইন পদ্ধতি সক্ষম করুন।
  3. সেটিংস পৃষ্ঠায়, আপনি যে অঞ্চলগুলিতে SMS বার্তা প্রেরণের অনুমতি দিতে বা অস্বীকার করতে চান তার উপর একটি নীতি সেট করুন। নতুন প্রকল্পের জন্য, ডিফল্ট নীতি কোনও অঞ্চলকে অনুমতি দেয় না।

APN বিজ্ঞপ্তিগুলি পাওয়া শুরু করুন (অ্যাপল প্ল্যাটফর্ম)

অ্যাপল প্ল্যাটফর্মে ফোন নম্বর প্রমাণীকরণ ব্যবহার করার জন্য, আপনার অ্যাপটিকে অবশ্যই Firebase থেকে APN বিজ্ঞপ্তি পেতে সক্ষম হতে হবে। যখন আপনি কোনও ব্যবহারকারীর ফোন নম্বর দিয়ে প্রথমবারের মতো কোনও ডিভাইসে সাইন ইন করেন, তখন Firebase Authentication ডিভাইসে একটি নীরব পুশ বিজ্ঞপ্তি পাঠায় যাতে যাচাই করা যায় যে ফোন নম্বর সাইন-ইন অনুরোধটি আপনার অ্যাপ থেকে এসেছে। (এই কারণে, সিমুলেটরে ফোন নম্বর সাইন-ইন ব্যবহার করা যাবে না।)

Firebase Authentication সাথে ব্যবহারের জন্য APN বিজ্ঞপ্তিগুলি সক্ষম করতে:

  1. এক্সকোডে, আপনার প্রকল্পের জন্য পুশ বিজ্ঞপ্তি সক্ষম করুন
  2. আপনার APN সার্টিফিকেট Firebase-এ আপলোড করুন। যদি আপনার কাছে ইতিমধ্যেই APN সার্টিফিকেট না থাকে, তাহলে Apple Developer Member Center- এ একটি তৈরি করতে ভুলবেন না।

    1. Firebase কনসোলে আপনার প্রোজেক্টের ভিতরে, গিয়ার আইকনটি নির্বাচন করুন, প্রোজেক্ট সেটিংস নির্বাচন করুন এবং তারপর ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন।

    2. আপনার ডেভেলপমেন্ট সার্টিফিকেট, প্রোডাকশন সার্টিফিকেট, অথবা উভয়ের জন্য আপলোড সার্টিফিকেট বোতামটি নির্বাচন করুন। কমপক্ষে একটি প্রয়োজন।

    3. প্রতিটি সার্টিফিকেটের জন্য, .p12 ফাইলটি নির্বাচন করুন এবং যদি থাকে তবে পাসওয়ার্ডটি প্রদান করুন। নিশ্চিত করুন যে এই সার্টিফিকেটের বান্ডেল আইডি আপনার অ্যাপের বান্ডেল আইডির সাথে মেলে। সংরক্ষণ নির্বাচন করুন।

ব্যবহারকারীর ফোনে একটি যাচাইকরণ কোড পাঠান

ফোন নম্বর সাইন-ইন শুরু করতে, ব্যবহারকারীকে একটি ইন্টারফেস উপস্থাপন করুন যা তাদের ফোন নম্বর প্রদান করতে অনুরোধ করবে, এবং তারপর PhoneAuthProvider::VerifyPhoneNumber কল করে Firebase-কে SMS এর মাধ্যমে ব্যবহারকারীর ফোনে একটি প্রমাণীকরণ কোড পাঠাতে অনুরোধ করুন:

  1. ব্যবহারকারীর ফোন নম্বর পান।

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

  2. 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-এ) আপনার অ্যাপে একটি নীরব পুশ বিজ্ঞপ্তি পাঠায়,
    • নির্দিষ্ট ফোন নম্বরে একটি প্রমাণীকরণ কোড সম্বলিত একটি SMS বার্তা পাঠায় এবং আপনার সমাপ্তি ফাংশনে একটি যাচাইকরণ আইডি প্রেরণ করে। ব্যবহারকারীকে সাইন ইন করার জন্য আপনার যাচাইকরণ কোড এবং যাচাইকরণ আইডি উভয়েরই প্রয়োজন হবে।
  3. যাচাইকরণ আইডি সংরক্ষণ করুন এবং আপনার অ্যাপ লোড হলে এটি পুনরুদ্ধার করুন। এটি করার মাধ্যমে, আপনি নিশ্চিত করতে পারেন যে ব্যবহারকারী সাইন-ইন প্রবাহ সম্পূর্ণ করার আগে (উদাহরণস্বরূপ, SMS অ্যাপে স্যুইচ করার সময়) আপনার অ্যাপটি বন্ধ হয়ে গেলেও আপনার কাছে একটি বৈধ যাচাইকরণ আইডি রয়েছে।

    আপনি যেকোনোভাবে যাচাইকরণ আইডিটি ধরে রাখতে পারেন। যদি আপনি একটি ক্রস-প্ল্যাটফর্ম C++ ফ্রেমওয়ার্ক ব্যবহার করে লেখেন, তাহলে এটি অ্যাপ বন্ধ এবং পুনরুদ্ধারের জন্য বিজ্ঞপ্তি প্রদান করবে। এই ইভেন্টগুলিতে, আপনি যথাক্রমে যাচাইকরণ আইডি সংরক্ষণ এবং পুনরুদ্ধার করতে পারেন।

যদি VerifyPhoneNumber এ কল করার ফলে আপনার Listener-এ OnCodeSent কল করা হয়, তাহলে আপনি ব্যবহারকারীকে SMS বার্তায় যাচাইকরণ কোডটি টাইপ করতে বলতে পারেন।

অন্যদিকে, যদি VerifyPhoneNumber এ কল করার ফলে OnVerificationCompleted আসে, তাহলে স্বয়ংক্রিয় যাচাইকরণ সফল হয়েছে এবং আপনার কাছে এখন একটি PhoneAuthCredential থাকবে যা আপনি নীচে বর্ণিত পদ্ধতিতে ব্যবহার করতে পারবেন।

যাচাইকরণ কোড দিয়ে ব্যবহারকারীকে সাইন ইন করুন।

ব্যবহারকারী আপনার অ্যাপে SMS বার্তা থেকে যাচাইকরণ কোড সরবরাহ করার পরে, যাচাইকরণ কোড এবং যাচাইকরণ আইডি থেকে একটি PhoneAuthCredential অবজেক্ট তৈরি করে এবং সেই অবজেক্টটি Auth::SignInWithCredential এ পাস করে ব্যবহারকারীকে সাইন ইন করুন।

  1. ব্যবহারকারীর কাছ থেকে যাচাইকরণ কোডটি পান।
  2. যাচাইকরণ কোড এবং যাচাইকরণ আইডি থেকে একটি Credential বস্তু তৈরি করুন।
    PhoneAuthCredential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. 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();