Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

फोन नंबर और C ++ का उपयोग करके Firebase के साथ प्रमाणीकरण

आप उपयोगकर्ता के फोन पर एक एसएमएस संदेश भेजकर उपयोगकर्ता को साइन इन करने के लिए फायरबेस प्रमाणीकरण का उपयोग कर सकते हैं। एसएमएस संदेश में निहित एक बार कोड का उपयोग करने में उपयोगकर्ता संकेत करता है।

यह दस्तावेज़ बताता है कि फायरबेस एसडीके का उपयोग करके फोन नंबर साइन-इन प्रवाह को कैसे लागू किया जाए।

शुरू करने से पहले

  1. अपने C ++ प्रोजेक्ट में Firebase जोड़ें
  2. अपने प्रोजेक्ट-लेवल build.gradle फ़ाइल में, अपने buildscript और allprojects दोनों वर्गों में Google के buildscript रिपॉजिटरी को शामिल करना सुनिश्चित करें।
  3. अगर आपने अभी तक अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट नहीं किया है, तो फायरबेस कंसोल से करें

IOS पर, ध्यान दें कि फ़ोन नंबर साइन-इन के लिए एक भौतिक उपकरण की आवश्यकता होती है और यह सिम्युलेटर पर काम नहीं करेगा।

सुरक्षा चिंतायें

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

यदि आप अपने ऐप में फ़ोन नंबर आधारित साइन-इन का उपयोग करते हैं, तो आपको इसे अधिक सुरक्षित साइन-इन विधियों के साथ पेश करना चाहिए, और फ़ोन नंबर साइन-इन का उपयोग करके सुरक्षा ट्रेडऑफ़ के उपयोगकर्ताओं को सूचित करना चाहिए।

अपने फायरबेस प्रोजेक्ट के लिए फ़ोन नंबर साइन-इन सक्षम करें

एसएमएस द्वारा उपयोगकर्ताओं में साइन इन करने के लिए, आपको सबसे पहले अपने फायरबेस प्रोजेक्ट के लिए फोन नंबर साइन-इन विधि को सक्षम करना होगा:

  1. Firebase कंसोल में , प्रमाणीकरण अनुभाग खोलें।
  2. साइन-इन विधि पृष्ठ पर, फ़ोन नंबर साइन-इन विधि सक्षम करें।

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

APNs सूचनाएं प्राप्त करना प्रारंभ करें (iOS)

आईओएस पर फोन नंबर प्रमाणीकरण का उपयोग करने के लिए, आपका ऐप फायरबेस से एपीएन सूचनाएं प्राप्त करने में सक्षम होना चाहिए। जब आप किसी डिवाइस पर पहली बार किसी यूजर के फोन नंबर के साथ साइन इन करते हैं, तो फायरबेस ऑथेंटिकेशन डिवाइस को साइलेंट पुश नोटिफिकेशन भेजता है ताकि यह पता चल सके कि आपके ऐप से फोन नंबर साइन-इन रिक्वेस्ट आता है। (इस कारण से, फ़ोन नंबर साइन-इन का उपयोग सिम्युलेटर पर नहीं किया जा सकता है।)

फायरबेस प्रमाणीकरण के साथ उपयोग के लिए APN सूचनाओं को सक्षम करने के लिए:

  1. Xcode में, अपने प्रोजेक्ट के लिए पुश सूचनाएँ सक्षम करें।
  2. अपने APNs प्रमाणपत्र को Firebase पर अपलोड करें। यदि आपके पास पहले से कोई APN प्रमाणपत्र नहीं है, तो APNs SSL प्रमाणपत्र का प्रावधान करें देखें।

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

    2. अपने विकास प्रमाणपत्र, अपने उत्पादन प्रमाणपत्र या दोनों के लिए अपलोड प्रमाणपत्र बटन का चयन करें। कम से कम एक की आवश्यकता है।

    3. प्रत्येक प्रमाणपत्र के लिए, .p12 फ़ाइल का चयन करें, और यदि कोई हो, तो पासवर्ड प्रदान करें। सुनिश्चित करें कि इस प्रमाणपत्र के लिए बंडल आईडी आपके ऐप के बंडल आईडी से मेल खाती है। सहेजें का चयन करें

उपयोगकर्ता के फोन पर एक सत्यापन कोड भेजें

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

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

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

  2. PhoneAuthProvider::VerifyPhoneNumber कॉल करें, जो उपयोगकर्ता के फोन नंबर को पास करता है।
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential 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;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    जब आप PhoneAuthProvider::VerifyPhoneNumber कहते हैं PhoneAuthProvider::VerifyPhoneNumber , Firebase,
    • (iOS पर) आपके ऐप पर एक साइलेंट पुश नोटिफिकेशन भेजता है,
    • एक एसएमएस संदेश भेजता है जिसमें एक निर्दिष्ट फोन नंबर के लिए एक प्रमाणीकरण कोड होता है और आपके पूर्ण कार्य के लिए एक सत्यापन आईडी पास करता है। उपयोगकर्ता में हस्ताक्षर करने के लिए आपको सत्यापन कोड और सत्यापन आईडी दोनों की आवश्यकता होगी।
  3. सत्यापन आईडी को सहेजें और जब आपका ऐप लोड हो जाए तो इसे पुनर्स्थापित करें। ऐसा करने से, आप यह सुनिश्चित कर सकते हैं कि आपके पास अभी भी एक मान्य सत्यापन आईडी है यदि आपका ऐप उपयोगकर्ता द्वारा साइन-इन प्रवाह (उदाहरण के लिए, एसएमएस ऐप पर स्विच करते समय) पूरा होने से पहले समाप्त हो जाता है।

    आप किसी भी तरह से सत्यापन आईडी को जारी रख सकते हैं। यदि आप एक क्रॉस-प्लेटफ़ॉर्म C ++ फ्रेमवर्क के साथ लिख रहे हैं, तो इसे ऐप समाप्ति और बहाली के लिए सूचनाएं प्रदान करनी चाहिए। इन घटनाओं पर, आप सत्यापन आईडी को क्रमशः सहेज सकते हैं और पुनर्स्थापित कर सकते हैं।

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

दूसरी ओर, यदि VerifyPhoneNumber पर कॉल का परिणाम OnVerificationCompleted , तो स्वचालित सत्यापन सफल हो गया है और अब आपके पास एक Credential होगा जिसके साथ आप नीचे वर्णित अनुसार उपयोग कर सकते हैं।

सत्यापन कोड के साथ उपयोगकर्ता में साइन इन करें

उपयोगकर्ता एसएमएस संदेश से सत्यापन कोड के साथ अपना ऐप प्रदान करने के बाद, सत्यापन कोड और सत्यापन आईडी से एक Credential ऑब्जेक्ट बनाकर उपयोगकर्ता को साइन इन करें और उस ऑब्जेक्ट को Auth::SignInWithCredential को पास कर रहा है।

  1. उपयोगकर्ता से सत्यापन कोड प्राप्त करें।
  2. सत्यापन कोड और सत्यापन आईडी से एक Credential ऑब्जेक्ट बनाएं।
    Credential 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.
            const 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 ऑब्जेक्ट:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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();
    }
    
  • अपने फायरबेस रियलटाइम डेटाबेस और क्लाउड स्टोरेज सिक्योरिटी रूल्स में , आप हस्ताक्षरित-इन यूजर की यूनिक यूजर आईडी को auth वैरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप उपयोगकर्ताओं को किसी मौजूदा उपयोगकर्ता खाते में कई प्रदाता प्रदाता को प्रमाणित करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

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

auth->SignOut();