Firebase Authentication की मदद से, उपयोगकर्ता के फ़ोन पर एसएमएस भेजकर उसे साइन इन कराया जा सकता है. उपयोगकर्ता, एसएमएस में मौजूद एक बार इस्तेमाल किया जा सकने वाले कोड की मदद से साइन इन करता है.
इस दस्तावेज़ में, Firebase SDK का इस्तेमाल करके, फ़ोन नंबर से साइन इन करने की प्रोसेस लागू करने का तरीका बताया गया है.
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें.
- अगर आपने अब तक अपने ऐप्लिकेशन को Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल से कनेक्ट करें.
- फ़ोन नंबर से साइन इन करने के लिए, प्लैटफ़ॉर्म की ज़रूरी शर्तें समझें:
- फ़ोन नंबर से साइन इन करने की सुविधा सिर्फ़ मोबाइल प्लैटफ़ॉर्म के लिए है.
- iOS पर, फ़ोन नंबर से साइन इन करने के लिए किसी असली डिवाइस की ज़रूरत होती है. यह सिम्युलेटर पर काम नहीं करेगा.
सुरक्षा से जुड़ी चिंताएं
सिर्फ़ फ़ोन नंबर का इस्तेमाल करके पुष्टि करना, सुविधाजनक होने के बावजूद, उपलब्ध अन्य तरीकों की तुलना में कम सुरक्षित है. ऐसा इसलिए, क्योंकि फ़ोन नंबर का मालिकाना हक आसानी से एक उपयोगकर्ता से दूसरे उपयोगकर्ता को ट्रांसफ़र किया जा सकता है. इसके अलावा, एक से ज़्यादा उपयोगकर्ता प्रोफ़ाइल वाले डिवाइसों पर, एसएमएस पाने वाला कोई भी उपयोगकर्ता, डिवाइस के फ़ोन नंबर का इस्तेमाल करके किसी खाते में साइन इन कर सकता है.
अगर आपके ऐप्लिकेशन में फ़ोन नंबर से साइन इन करने की सुविधा है, तो आपको इसे ज़्यादा सुरक्षित साइन-इन तरीकों के साथ उपलब्ध कराना चाहिए. साथ ही, उपयोगकर्ताओं को फ़ोन नंबर से साइन इन करने के सुरक्षा से जुड़े जोखिमों के बारे में बताना चाहिए.
अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन इन करने की सुविधा चालू करना
एसएमएस की मदद से उपयोगकर्ताओं को साइन इन कराने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन इन करने का तरीका चालू करना होगा:
- Firebase कंसोल में, सुरक्षा > पुष्टि पर जाएं.
- साइन-इन करने का तरीका टैब में, फ़ोन साइन-इन करने की सुविधा देने वाले प्लैटफ़ॉर्म को चालू करें.
-
उन इलाकों के लिए नीति सेट करें जहां आपको एसएमएस भेजने की अनुमति देनी है या नहीं देनी है
एसएमएस के लिए इलाके की नीति सेट करने से, आपके
ऐप्लिकेशन को एसएमएस के गलत इस्तेमाल से बचाने में मदद मिल सकती है. नए प्रोजेक्ट के लिए, डिफ़ॉल्ट नीति के तहत किसी भी इलाके में एसएमएस भेजने की अनुमति नहीं होती.
- Firebase कंसोल में, सुरक्षा > पुष्टि > सेटिंग टैब पर जाएं.
- एसएमएस के लिए इलाके की नीति सेक्शन में, एसएमएस के लिए इलाके की नीति सेट अप करें.
APNs सूचनाएं पाना शुरू करना (Apple प्लैटफ़ॉर्म)
Apple प्लैटफ़ॉर्म पर, फ़ोन नंबर की मदद से पुष्टि करने की सुविधा का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को Firebase से APNs सूचनाएं पाने की अनुमति होनी चाहिए. जब किसी डिवाइस पर पहली बार, उपयोगकर्ता को उसके फ़ोन नंबर से साइन इन कराया जाता है, तो Firebase Authentication उस डिवाइस पर एक साइलेंट पुश नोटिफ़िकेशन भेजता है. इससे यह पुष्टि होती है कि फ़ोन नंबर से साइन इन करने का अनुरोध आपके ऐप्लिकेशन से आया है. (इस वजह से, फ़ोन नंबर से साइन इन करने की सुविधा का इस्तेमाल सिम्युलेटर पर नहीं किया जा सकता.)
Firebase Authentication के साथ इस्तेमाल करने के लिए, APNs सूचनाएं पाने की सुविधा चालू करने के लिए:
- Xcode में, पुश नोटिफ़िकेशन की सुविधा चालू करें अपने प्रोजेक्ट के लिए.
अपना APNs सर्टिफ़िकेट, Firebase पर अपलोड करें. अगर आपके पास पहले से APNs सर्टिफ़िकेट नहीं है, तो Apple Developer Member Center में जाकर, एक सर्टिफ़िकेट बनाएं.
-
Firebase कंसोल में, सेटिंग पर जाएं
सेटिंग > सामान्य. इसके बाद, Cloud Messaging टैब पर क्लिक करें. - डेवलपमेंट सर्टिफ़िकेट, आपके प्रोडक्शन सर्टिफ़िकेट या दोनों के लिए, सर्टिफ़िकेट अपलोड करें पर क्लिक करें. इनमें से कम से कम एक सर्टिफ़िकेट होना ज़रूरी है.
-
हर सर्टिफ़िकेट के लिए,
.p12फ़ाइल चुनें. साथ ही, अगर कोई पासवर्ड है, तो उसे डालें. पक्का करें कि इस सर्टिफ़िकेट का बंडल आईडी, आपके ऐप्लिकेशन के बंडल आईडी से मेल खाता हो. सेव करें पर क्लिक करें.
-
Firebase कंसोल में, सेटिंग पर जाएं
उपयोगकर्ता के फ़ोन पर पुष्टि करने के लिए कोड भेजना
फ़ोन नंबर से साइन इन करने की प्रोसेस शुरू करने के लिए, उपयोगकर्ता को एक ऐसा इंटरफ़ेस दिखाएं जिसमें उससे अपना फ़ोन नंबर देने के लिए कहा जाए. इसके बाद, PhoneAuthProvider::VerifyPhoneNumber को कॉल करके, Firebase से अनुरोध करें कि वह उपयोगकर्ता के फ़ोन पर एसएमएस के ज़रिए पुष्टि करने के लिए कोड भेजे:
-
उपयोगकर्ता का फ़ोन नंबर पाएं.
कानूनी ज़रूरतें अलग-अलग हो सकती हैं. हालांकि, सबसे सही तरीका यह है कि उपयोगकर्ताओं को यह बताया जाए कि अगर वे फ़ोन नंबर से साइन इन करते हैं, तो उन्हें पुष्टि करने के लिए एसएमएस मिल सकता है. साथ ही, उन पर सामान्य शुल्क लागू होंगे.
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 को कॉल किया जाता है, तो उपयोगकर्ता को एसएमएस मिलने पर, उससे पुष्टि करने के लिए कोड टाइप करने के लिए कहा जा सकता है.
दूसरी ओर, अगर 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 प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. भले ही, उपयोगकर्ता किसी भी तरीके से साइन इन करे.
-
अपने ऐप्लिकेशन में,
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();