फ़ोन नंबर और C++ का इस्तेमाल करके, Firebase से पुष्टि करें

आप उपयोगकर्ता के फ़ोन पर मैसेज (एसएमएस) भेजकर साइन इन करने के लिए Firebase से पुष्टि करने की सुविधा का इस्तेमाल कर सकते हैं. उपयोगकर्ता, एसएमएस मैसेज में मौजूद एक बार इस्तेमाल होने वाले कोड का इस्तेमाल करके साइन इन करता है.

इस दस्तावेज़ में Firebase SDK टूल का इस्तेमाल करके, फ़ोन नंबर के साइन-इन फ़्लो को लागू करने का तरीका बताया गया है.

वेब कंटेनर इंस्टॉल करने से पहले

  1. Firebase को अपने C++ प्रोजेक्ट में जोड़ें.
  2. अगर आपने अभी तक अपने ऐप्लिकेशन को Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल से ऐसा करें.
  3. फ़ोन नंबर से साइन-इन करने के लिए, प्लैटफ़ॉर्म की ज़रूरी शर्तों को समझें:
    • फ़ोन नंबर से साइन इन करने की सुविधा, सिर्फ़ मोबाइल प्लैटफ़ॉर्म के लिए है.
    • iOS पर, फ़ोन नंबर से साइन इन करने के लिए किसी डिवाइस की ज़रूरत होती है. यह सिम्युलेटर पर काम नहीं करेगा.

सुरक्षा से जुड़ी समस्याएं

सिर्फ़ फ़ोन नंबर का इस्तेमाल करके पुष्टि करना, जो सुविधाजनक है वह अन्य उपलब्ध तरीकों के मुकाबले कम सुरक्षित है. इसकी वजह यह है कि उपयोगकर्ताओं के पास फ़ोन नंबर होने की वजह से, उनके बीच आसानी से पुष्टि की जा सकती है. साथ ही, एकाधिक उपयोगकर्ता प्रोफ़ाइल वाले डिवाइसों पर, SMS संदेश प्राप्त करने वाला कोई भी उपयोगकर्ता डिवाइस के फ़ोन नंबर का उपयोग करके खाते में प्रवेश कर सकता है.

अगर आपके ऐप्लिकेशन में फ़ोन नंबर के ज़रिए साइन इन करने की सुविधा का इस्तेमाल किया जाता है, तो आपको साइन-इन करने के ज़्यादा सुरक्षित तरीकों के साथ-साथ इसकी सुविधा भी देनी चाहिए. साथ ही, उपयोगकर्ताओं को फ़ोन नंबर से साइन-इन करने के सुरक्षित तरीकों के बारे में जानकारी देनी चाहिए.

अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन-इन करने की सुविधा चालू करना

उपयोगकर्ताओं को एसएमएस से साइन इन करने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन इन करने का तरीका चालू करना होगा:

  1. Firebase कंसोल में, पुष्टि करने की सुविधा वाला सेक्शन खोलें.
  2. साइन इन करने का तरीका पेज पर, फ़ोन नंबर से साइन इन करने का तरीका चालू करें.

Firebase के फ़ोन नंबर से साइन-इन करने के अनुरोध का कोटा काफ़ी ज़्यादा है. इसका असर ज़्यादातर ऐप्लिकेशन पर नहीं पड़ेगा. हालांकि, अगर आपको फ़ोन से पुष्टि करने वाले बहुत ज़्यादा उपयोगकर्ताओं को साइन इन करने की ज़रूरत है, तो आपको अपना प्राइसिंग प्लान अपग्रेड करना पड़ सकता है. कीमत तय करने वाला पेज देखें.

एपीएन से जुड़ी सूचनाएं पाना शुरू करें (Apple प्लैटफ़ॉर्म)

Apple प्लैटफ़ॉर्म पर फ़ोन नंबर की पुष्टि करने की सुविधा का इस्तेमाल करने के लिए, यह ज़रूरी है कि आपके ऐप्लिकेशन को Firebase से APNs सूचनाएं मिल पाएं. जब किसी उपयोगकर्ता को डिवाइस पर पहली बार उसके फ़ोन नंबर से साइन इन किया जाता है, तो Firebase से पुष्टि करने की सुविधा, डिवाइस को एक साइलेंट पुश नोटिफ़िकेशन भेजती है.

Firebase से पुष्टि करने की सुविधा के साथ इस्तेमाल करने के लिए, एपीएन से जुड़ी सूचनाएं पाने की सुविधा चालू करने के लिए:

  1. Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफ़िकेशन चालू करें.
  2. अपने एपीएन सर्टिफ़िकेट को Firebase पर अपलोड करें. अगर आपके पास पहले से कोई एपीएन सर्टिफ़िकेट नहीं है, तो Apple Developer Member Center में जाकर एक एपीएन सर्टिफ़िकेट ज़रूर बनाएं.

    1. Firebase कंसोल में, अपने प्रोजेक्ट में गियर आइकॉन चुनें, प्रोजेक्ट सेटिंग चुनें, और फिर क्लाउड से मैसेज टैब चुनें.

    2. अपने डेवलपमेंट सर्टिफ़िकेट, प्रोडक्शन सर्टिफ़िकेट या दोनों के लिए, सर्टिफ़िकेट अपलोड करें बटन चुनें. कम से कम एक फ़ील्ड भरना ज़रूरी है.

    3. हर सर्टिफ़िकेट के लिए, .p12 फ़ाइल चुनें और अगर पासवर्ड उपलब्ध हो, तो वह डालें. पक्का करें कि इस सर्टिफ़िकेट का बंडल आईडी, आपके ऐप्लिकेशन के बंडल आईडी से मेल खाता हो. सेव करें चुनें.

उपयोगकर्ता के फ़ोन पर पुष्टि करने के लिए कोड भेजें

फ़ोन नंबर से साइन-इन करने के लिए, उपयोगकर्ता को ऐसा इंटरफ़ेस दिखाएं जो उसे अपना फ़ोन नंबर देने के लिए कहता हो. इसके बाद, PhoneAuthProvider::VerifyPhoneNumber पर कॉल करके अनुरोध करें कि Firebase, मैसेज (एसएमएस) के ज़रिए उपयोगकर्ता के फ़ोन पर पुष्टि करने वाला कोड भेजे:

  1. उपयोगकर्ता का फ़ोन नंबर पाएं.

    कानूनी समझौते की शर्तें अलग-अलग हो सकती हैं. हालांकि, सबसे सही तरीका यह है कि अपने उपयोगकर्ताओं के लिए उम्मीदें तय करने के लिए, उन्हें यह जानकारी दी जानी चाहिए कि अगर वे फ़ोन से साइन-इन की सुविधा इस्तेमाल करते हैं, तो उन्हें पुष्टि के लिए एक मैसेज (एसएमएस) मिल सकता है. साथ ही, उन्हें पुष्टि करने के लिए एक एसएमएस मिल सकता है. साथ ही, आपको सामान्य दरें लागू होंगी.

  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 पर) आपके ऐप्लिकेशन को साइलेंट पुश नोटिफ़िकेशन भेजता है,
    • दिए गए फ़ोन नंबर पर पुष्टि करने के कोड के साथ एक एसएमएस मैसेज भेजता है. साथ ही, पुष्टि करने का आईडी देने के लिए आपके पूरे होने वाले फ़ंक्शन को एक पुष्टि आईडी भी भेजता है. उपयोगकर्ता को साइन इन करने के लिए, आपको पुष्टि करने वाला कोड और आईडी, दोनों की ज़रूरत होगी.
  3. पुष्टि करने के लिए इस्तेमाल होने वाले आईडी को सेव करें और ऐप्लिकेशन लोड होने पर इसे वापस लाएं. ऐसा करने से, यह पक्का किया जा सकता है कि अगर उपयोगकर्ता के साइन इन फ़्लो को पूरा करने से पहले (उदाहरण के लिए, एसएमएस ऐप्लिकेशन पर स्विच करते समय) आपका ऐप्लिकेशन बंद कर दिया जाता है, तो आपके पास पुष्टि करने के लिए मान्य आईडी मौजूद है.

    पुष्टि करने वाले आईडी को सेव करके रखा जा सकता है. अगर आपको क्रॉस-प्लैटफ़ॉर्म C++ फ़्रेमवर्क का इस्तेमाल करके मैसेज लिखना है, तो ऐप्लिकेशन को बंद करने और उसे पहले जैसा करने से जुड़ी सूचनाएं दी जानी चाहिए. इन इवेंट पर, पुष्टि करने के लिए इस्तेमाल होने वाला आईडी सेव किया जा सकता है और उसे वापस लाया जा सकता है.

अगर VerifyPhoneNumber को कॉल करने पर, आपके लिसनर को OnCodeSent कॉल किया जाता है, तो आपके पास यह विकल्प है कि उपयोगकर्ता को एसएमएस मैसेज में पुष्टि करने के लिए कोड मिलने पर उसे टाइप करने का निर्देश दिया जाए.

वहीं दूसरी ओर, अगर VerifyPhoneNumber को कॉल करने पर OnVerificationCompleted आता है, तो अपने-आप पुष्टि हो गई है और अब आपके पास एक PhoneAuthCredential होगा. इसका इस्तेमाल नीचे बताए गए तरीके से किया जा सकता है.

पुष्टि करने के कोड से उपयोगकर्ता को साइन इन करें

उपयोगकर्ता की ओर से आपके ऐप्लिकेशन को मैसेज (एसएमएस) से मिला पुष्टि करने वाला कोड मिलने के बाद, पुष्टि करने के कोड और पुष्टि आईडी से एक 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 रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, auth वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी पाया जा सकता है और उसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.

आप पुष्टि करने वाली सेवा देने वाली कंपनियों के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके, उपयोगकर्ताओं को अपने ऐप्लिकेशन में साइन इन करने की अनुमति दे सकते हैं.

किसी उपयोगकर्ता को साइन आउट करने के लिए, SignOut() पर कॉल करें:

auth->SignOut();