आप उपयोगकर्ता के फोन पर एसएमएस संदेश भेजकर साइन इन करने के लिए फायरबेस प्रमाणीकरण का उपयोग कर सकते हैं। उपयोगकर्ता एसएमएस संदेश में निहित एक बार के कोड का उपयोग करके साइन इन करता है।
यह दस्तावेज़ बताता है कि Firebase SDK का उपयोग करके फ़ोन नंबर साइन-इन प्रवाह को कैसे लागू किया जाए।
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें ।
- अगर आपने अभी तक अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट नहीं किया है, तो फायरबेस कंसोल से ऐसा करें।
- फ़ोन नंबर साइन-इन के लिए प्लेटफ़ॉर्म आवश्यकताओं को समझें:
- फ़ोन नंबर साइन-इन केवल मोबाइल प्लेटफ़ॉर्म के लिए है।
- iOS पर, फ़ोन नंबर साइन-इन के लिए एक भौतिक उपकरण की आवश्यकता होती है और यह सिम्युलेटर पर काम नहीं करेगा।
सुरक्षा चिंताएं
केवल एक फ़ोन नंबर का उपयोग करके प्रमाणीकरण, जबकि सुविधाजनक है, अन्य उपलब्ध विधियों की तुलना में कम सुरक्षित है, क्योंकि एक फ़ोन नंबर का अधिकार उपयोगकर्ताओं के बीच आसानी से स्थानांतरित किया जा सकता है। साथ ही, एकाधिक उपयोगकर्ता प्रोफ़ाइल वाले उपकरणों पर, कोई भी उपयोगकर्ता जो एसएमएस संदेश प्राप्त कर सकता है, डिवाइस के फ़ोन नंबर का उपयोग करके खाते में साइन इन कर सकता है।
यदि आप अपने ऐप में फ़ोन नंबर आधारित साइन-इन का उपयोग करते हैं, तो आपको इसे अधिक सुरक्षित साइन-इन विधियों के साथ पेश करना चाहिए, और उपयोगकर्ताओं को फ़ोन नंबर साइन-इन का उपयोग करने के सुरक्षा ट्रेडऑफ़ के बारे में सूचित करना चाहिए।
अपने फायरबेस प्रोजेक्ट के लिए फ़ोन नंबर साइन-इन सक्षम करें
उपयोगकर्ताओं को एसएमएस द्वारा साइन इन करने के लिए, आपको पहले अपने फायरबेस प्रोजेक्ट के लिए फ़ोन नंबर साइन-इन विधि को सक्षम करना होगा:
- फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें।
- साइन-इन विधि पृष्ठ पर, फ़ोन नंबर साइन-इन विधि सक्षम करें।
फायरबेस का फ़ोन नंबर साइन-इन अनुरोध कोटा इतना अधिक है कि अधिकांश ऐप्स प्रभावित नहीं होंगे। हालांकि, यदि आपको फ़ोन प्रमाणीकरण के साथ उपयोगकर्ताओं की बहुत अधिक मात्रा में साइन इन करने की आवश्यकता है, तो आपको अपनी मूल्य निर्धारण योजना को अपग्रेड करने की आवश्यकता हो सकती है। मूल्य निर्धारण पृष्ठ देखें।
APN सूचनाएं प्राप्त करना प्रारंभ करें (Apple प्लेटफ़ॉर्म)
Apple प्लेटफ़ॉर्म पर फ़ोन नंबर प्रमाणीकरण का उपयोग करने के लिए, आपके ऐप को Firebase से APN सूचनाएं प्राप्त करने में सक्षम होना चाहिए। जब आप किसी डिवाइस पर पहली बार किसी उपयोगकर्ता के फोन नंबर के साथ साइन इन करते हैं, तो फायरबेस ऑथेंटिकेशन यह सत्यापित करने के लिए डिवाइस को एक साइलेंट पुश नोटिफिकेशन भेजता है कि फोन नंबर साइन-इन अनुरोध आपके ऐप से आता है। (इस कारण से, सिमुलेटर पर फ़ोन नंबर साइन-इन का उपयोग नहीं किया जा सकता है।)
Firebase प्रमाणीकरण के साथ उपयोग के लिए APN सूचनाएं सक्षम करने के लिए:
- Xcode में, अपने प्रोजेक्ट के लिए पुश सूचनाएँ सक्षम करें ।
अपने APNs प्रमाणपत्र को Firebase पर अपलोड करें। यदि आपके पास पहले से कोई APN प्रमाणपत्र नहीं है, तो Apple डेवलपर सदस्य केंद्र में एक प्रमाणपत्र बनाना सुनिश्चित करें।
फायरबेस कंसोल में अपने प्रोजेक्ट के अंदर, गियर आइकन का चयन करें, प्रोजेक्ट सेटिंग्स का चयन करें और फिर क्लाउड मैसेजिंग टैब का चयन करें।
अपने विकास प्रमाण पत्र, अपने उत्पादन प्रमाण पत्र, या दोनों के लिए प्रमाणपत्र अपलोड करें बटन का चयन करें। कम से कम एक आवश्यक है।
प्रत्येक प्रमाणपत्र के लिए, .p12 फ़ाइल का चयन करें, और पासवर्ड प्रदान करें, यदि कोई हो। सुनिश्चित करें कि इस प्रमाणपत्र की बंडल आईडी आपके ऐप की बंडल आईडी से मेल खाती है। सहेजें चुनें.
उपयोगकर्ता के फ़ोन पर एक सत्यापन कोड भेजें
फ़ोन नंबर साइन-इन आरंभ करने के लिए, उपयोगकर्ता को एक इंटरफ़ेस प्रस्तुत करें जो उन्हें अपना फ़ोन नंबर प्रदान करने के लिए संकेत देता है, और फिर PhoneAuthProvider::VerifyPhoneNumber
पर कॉल करके यह अनुरोध करें कि Firebase उपयोगकर्ता के फ़ोन पर 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, को कॉल करते हैं- (आईओएस पर) आपके ऐप पर एक साइलेंट पुश नोटिफिकेशन भेजता है,
- निर्दिष्ट फ़ोन नंबर पर एक प्रमाणीकरण कोड वाला एक एसएमएस संदेश भेजता है और आपके पूर्ण कार्य के लिए एक सत्यापन आईडी पास करता है। उपयोगकर्ता में साइन इन करने के लिए आपको सत्यापन कोड और सत्यापन आईडी दोनों की आवश्यकता होगी।
सत्यापन आईडी सहेजें और जब आपका ऐप लोड हो जाए तो इसे पुनर्स्थापित करें। ऐसा करके, आप यह सुनिश्चित कर सकते हैं कि आपके पास अभी भी एक वैध सत्यापन आईडी है यदि उपयोगकर्ता द्वारा साइन-इन प्रवाह पूरा करने से पहले आपका ऐप समाप्त कर दिया गया है (उदाहरण के लिए, एसएमएस ऐप पर स्विच करते समय)।
आप सत्यापन आईडी को किसी भी तरह से जारी रख सकते हैं। यदि आप एक क्रॉस-प्लेटफ़ॉर्म C ++ फ्रेमवर्क के साथ लिख रहे हैं, तो उसे ऐप समाप्ति और बहाली के लिए सूचनाएँ प्रदान करनी चाहिए। इन घटनाओं पर, आप सत्यापन आईडी को क्रमशः सहेज और पुनर्स्थापित कर सकते हैं।
यदि VerifyPhoneNumber
पर किए गए कॉल के परिणामस्वरूप आपके श्रोता पर OnCodeSent
कॉल किया जा रहा है, तो आप उपयोगकर्ता को एसएमएस संदेश में सत्यापन कोड प्राप्त होने पर उसे टाइप करने के लिए संकेत दे सकते हैं।
दूसरी ओर, यदि 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(); }
आपके फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप
auth
चर से साइन-इन किए गए उपयोगकर्ता की विशिष्ट उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।
उपयोगकर्ता को साइन आउट करने के लिए, SignOut()
कॉल करें:
auth->SignOut();