फोन प्रमाणीकरण

फ़ोन प्रमाणीकरण उपयोगकर्ताओं को अपने फ़ोन को प्रमाणक के रूप में उपयोग करके Firebase में साइन इन करने की अनुमति देता है। उपयोगकर्ता को एक एसएमएस संदेश भेजा जाता है (प्रदान किए गए फोन नंबर का उपयोग करके) जिसमें एक अद्वितीय कोड होता है। एक बार कोड अधिकृत हो जाने के बाद, उपयोगकर्ता फायरबेस में साइन इन करने में सक्षम होता है।

अंतिम उपयोगकर्ता प्रमाणीकरण के लिए जो फ़ोन नंबर प्रदान करते हैं, उन्हें Google सेवा में स्पैम और दुरुपयोग की रोकथाम को बेहतर बनाने के लिए Google द्वारा भेजा और संग्रहीत किया जाएगा, जिसमें Firebase शामिल है, लेकिन यह इन्हीं तक सीमित नहीं है। फायरबेस प्रमाणीकरण फोन नंबर साइन-इन सेवा का उपयोग करने से पहले डेवलपर्स को यह सुनिश्चित करना चाहिए कि उनके पास उचित अंतिम उपयोगकर्ता की सहमति है। प्रमाणीकरण

फायरबेस फोन प्रमाणीकरण सभी देशों में समर्थित नहीं है। अधिक जानकारी के लिए कृपया उनके अक्सर पूछे जाने वाले प्रश्न देखें।

स्थापित करना

फ़ोन प्रमाणीकरण शुरू करने से पहले, सुनिश्चित करें कि आपने इन चरणों का पालन किया है:

  1. Firebase कंसोल में फ़ोन को साइन-इन विधि के रूप में सक्षम करें।
  2. Android : यदि आपने पहले से ही अपने ऐप के SHA-1 हैश को Firebase कंसोल में सेट नहीं किया है, तो ऐसा करें। अपने ऐप के SHA-1 हैश को खोजने के बारे में जानकारी के लिए अपने क्लाइंट को प्रमाणित करना देखें।
  3. आईओएस : एक्सकोड में, अपने प्रोजेक्ट के लिए पुश नोटिफिकेशन सक्षम करें और सुनिश्चित करें कि आपकी एपीएन प्रमाणीकरण कुंजी फायरबेस क्लाउड मैसेजिंग (एफसीएम) के साथ कॉन्फ़िगर की गई है। इस चरण की गहन व्याख्या देखने के लिए, फायरबेस आईओएस फोन प्रामाणिक दस्तावेज देखें।
  4. वेब : सुनिश्चित करें कि आपने OAuth रीडायरेक्ट डोमेन के तहत Firebase कंसोल पर अपना एप्लिकेशन डोमेन जोड़ा है।

नोट ; फ़ोन नंबर साइन-इन केवल वास्तविक उपकरणों और वेब पर उपयोग के लिए उपलब्ध है। डिवाइस एमुलेटर पर अपने प्रमाणीकरण प्रवाह का परीक्षण करने के लिए, कृपया परीक्षण देखें।

प्रयोग

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

  • नेटिव प्लेटफॉर्म : verifyPhoneNumber
  • वेब प्लेटफॉर्म : signInWithPhoneNumber

मूल निवासी: verifyPhoneNumber

स्थानीय प्लेटफ़ॉर्म पर, उपयोगकर्ता के फ़ोन नंबर को पहले सत्यापित किया जाना चाहिए और फिर उपयोगकर्ता या तो साइन-इन कर सकता है या अपने खाते को PhoneAuthCredential से लिंक कर सकता है।

सबसे पहले आपको उपयोगकर्ता को उनके फ़ोन नंबर के लिए संकेत देना चाहिए। एक बार प्रदान करने के बाद, verifyPhoneNumber() विधि को कॉल करें:

await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) {},
  verificationFailed: (FirebaseAuthException e) {},
  codeSent: (String verificationId, int? resendToken) {},
  codeAutoRetrievalTimeout: (String verificationId) {},
);

4 अलग-अलग कॉलबैक हैं जिन्हें आपको संभालना होगा, प्रत्येक यह निर्धारित करेगा कि आप एप्लिकेशन UI को कैसे अपडेट करते हैं:

  1. सत्यापन पूर्ण : Android उपकरणों पर एसएमएस कोड की स्वचालित हैंडलिंग।
  2. सत्यापन विफल: विफलता की घटनाओं को संभालें जैसे कि अमान्य फोन नंबर या एसएमएस कोटा पार हो गया है या नहीं।
  3. codeSent : जब फायरबेस से डिवाइस पर एक कोड भेजा गया हो, तो हैंडल करें, जिसका उपयोग उपयोगकर्ताओं को कोड दर्ज करने के लिए संकेत देने के लिए किया जाता है।
  4. codeAutoRetrievalTimeout : स्वचालित एसएमएस कोड हैंडलिंग विफल होने पर टाइमआउट संभाल लें।

सत्यापन पूर्ण

यह हैंडलर केवल उन Android उपकरणों पर कॉल किया जाएगा जो स्वचालित SMS कोड समाधान का समर्थन करते हैं।

जब एसएमएस कोड डिवाइस पर डिलीवर हो जाता है, तो एंड्रॉइड स्वचालित रूप से एसएमएस कोड को सत्यापित कर देगा, बिना उपयोगकर्ता को कोड को मैन्युअल रूप से इनपुट करने की आवश्यकता के बिना। यदि यह घटना होती है, तो एक PhoneAuthCredential स्वचालित रूप से प्रदान किया जाता है जिसका उपयोग उपयोगकर्ता के फ़ोन नंबर से साइन-इन या लिंक करने के लिए किया जा सकता है।

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) async {
    // ANDROID ONLY!

    // Sign the user in (or link) with the auto-generated credential
    await auth.signInWithCredential(credential);
  },
);

सत्यापन में विफल रहा

अगर फायरबेस एक त्रुटि देता है, उदाहरण के लिए गलत फोन नंबर के लिए या यदि प्रोजेक्ट के लिए एसएमएस कोटा पार हो गया है, तो इस हैंडलर को एक FirebaseAuthException भेजा जाएगा। इस मामले में, आप त्रुटि कोड के आधार पर अपने उपयोगकर्ता को कुछ गलत होने का संकेत देंगे।

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationFailed: (FirebaseAuthException e) {
    if (e.code == 'invalid-phone-number') {
      print('The provided phone number is not valid.');
    }

    // Handle other errors
  },
);

कोड भेजा है

जब फायरबेस डिवाइस को एक एसएमएस कोड भेजता है, तो यह हैंडलर एक verificationId आईडी और फिर से resendToken के साथ ट्रिगर होता है (एक resendToken केवल Android उपकरणों पर समर्थित है, iOS डिवाइस हमेशा एक null मान लौटाएगा)।

एक बार ट्रिगर होने के बाद, उपयोगकर्ता को वह एसएमएस कोड दर्ज करने के लिए प्रेरित करने के लिए अपने एप्लिकेशन UI को अपडेट करने का यह एक अच्छा समय होगा जिसकी वे अपेक्षा कर रहे हैं। एक बार एसएमएस कोड दर्ज करने के बाद, आप एक नया PhoneAuthCredential बनाने के लिए सत्यापन आईडी को एसएमएस कोड के साथ जोड़ सकते हैं:

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  codeSent: (String verificationId, int? resendToken) async {
    // Update the UI - wait for the user to enter the SMS code
    String smsCode = 'xxxx';

    // Create a PhoneAuthCredential with the code
    PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);

    // Sign the user in (or link) with the credential
    await auth.signInWithCredential(credential);
  },
);

डिफ़ॉल्ट रूप से, अगर हाल ही में भेजा गया है तो फायरबेस एक नया एसएमएस संदेश दोबारा नहीं भेजेगा। हालाँकि आप इस व्यवहार को फिर से कॉल करके verifyPhoneNumber विधि को फिर से भेजें टोकन के साथ forceResendingToken तर्क को ओवरराइड कर सकते हैं। सफल होने पर, एसएमएस संदेश फिर से भेज दिया जाएगा।

कोडऑटोरिट्रीवलटाइमआउट

एंड्रॉइड डिवाइस पर जो स्वचालित एसएमएस कोड रिज़ॉल्यूशन का समर्थन करते हैं, इस हैंडलर को कॉल किया जाएगा यदि डिवाइस ने एक निश्चित समय सीमा के भीतर एक एसएमएस संदेश को स्वचालित रूप से हल नहीं किया है। एक बार समय सीमा बीत जाने के बाद, डिवाइस आने वाले किसी भी संदेश को हल करने का प्रयास नहीं करेगा।

डिफ़ॉल्ट रूप से, डिवाइस 30 सेकंड तक प्रतीक्षा करता है हालांकि इसे timeout तर्क के साथ अनुकूलित किया जा सकता है:

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  timeout: const Duration(seconds: 60),
  codeAutoRetrievalTimeout: (String verificationId) {
    // Auto-resolution timed out...
  },
);

वेब: signInWithPhoneNumber

वेब प्लेटफ़ॉर्म पर, उपयोगकर्ता प्रदान किए गए फ़ोन नंबर पर भेजे गए एसएमएस कोड को दर्ज करके यह पुष्टि करके साइन-इन कर सकते हैं कि उनके पास फ़ोन तक पहुंच है। अतिरिक्त सुरक्षा और स्पैम रोकथाम के लिए, उपयोगकर्ताओं से अनुरोध है कि वे Google reCAPTCHA विजेट को पूरा करके यह साबित करें कि वे मानव हैं। एक बार पुष्टि हो जाने पर, एसएमएस कोड भेजा जाएगा।

फ़्लटर के लिए फायरबेस प्रमाणीकरण एसडीके डिफ़ॉल्ट रूप से बॉक्स के बाहर रीकैप्चा विजेट का प्रबंधन करेगा, हालांकि यह कैसे प्रदर्शित किया जाता है और यदि आवश्यक हो तो कॉन्फ़िगर किया गया है पर नियंत्रण प्रदान करता है। आरंभ करने के लिए, फ़ोन नंबर के साथ signInWithPhoneNumber पद्धति को कॉल करें।

FirebaseAuth auth = FirebaseAuth.instance;

// Wait for the user to complete the reCAPTCHA & for an SMS code to be sent.
ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456');

विधि को कॉल करने से पहले रीकैप्चा विजेट प्रदर्शित होने के लिए ट्रिगर होगा। एसएमएस कोड भेजे जाने से पहले उपयोगकर्ता को परीक्षण पूरा करना होगा। एक बार पूरा हो जाने पर, आप हल किए गए ConfirmationResult रिस्पॉन्स पर confirm विधि को एसएमएस कोड प्रदान करके उपयोगकर्ता को साइन इन कर सकते हैं:

UserCredential userCredential = await confirmationResult.confirm('123456');

अन्य साइन-इन प्रवाहों की तरह, एक सफल साइन-इन किसी भी प्रमाणीकरण स्थिति श्रोताओं को ट्रिगर करेगा जिन्हें आपने अपने पूरे एप्लिकेशन में सब्सक्राइब किया है।

रीकैप्चा कॉन्फ़िगरेशन

रीकैप्चा विजेट पूरी तरह से प्रबंधित प्रवाह है जो आपके वेब एप्लिकेशन को सुरक्षा प्रदान करता है।

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

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

एक इनलाइन विजेट जोड़ने के लिए, RecaptchaVerifier इंस्टेंस के container तर्क के लिए एक DOM एलिमेंट आईडी निर्दिष्ट करें। तत्व मौजूद होना चाहिए और खाली होना चाहिए अन्यथा एक त्रुटि फेंक दी जाएगी। यदि कोई container तर्क प्रदान नहीं किया जाता है, तो विजेट को "अदृश्य" के रूप में प्रस्तुत किया जाएगा।

ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456', RecaptchaVerifier(
  container: 'recaptcha',
  size: RecaptchaVerifierSize.compact,
  theme: RecaptchaVerifierTheme.dark,
));

जैसा कि ऊपर दिखाया गया है, आप size और theme तर्कों को अनुकूलित करके आकार और विषयवस्तु को वैकल्पिक रूप से बदल सकते हैं।

घटनाओं को सुनना भी संभव है, जैसे कि क्या उपयोगकर्ता द्वारा रीकैप्चा पूरा किया गया है, क्या रीकैप्चा की समय सीमा समाप्त हो गई है या कोई त्रुटि हुई है:

RecaptchaVerifier(
  onSuccess: () => print('reCAPTCHA Completed!'),
  onError: (FirebaseAuthException error) => print(error),
  onExpired: () => print('reCAPTCHA Expired!'),
);

परिक्षण

Firebase स्थानीय रूप से परीक्षण किए गए फ़ोन नंबरों के लिए सहायता प्रदान करता है:

  1. फायरबेस कंसोल पर, "फ़ोन" प्रमाणीकरण प्रदाता चुनें और "परीक्षण के लिए फ़ोन नंबर" ड्रॉपडाउन पर क्लिक करें।
  2. एक नया फ़ोन नंबर (जैसे +44 7444 555666 ) और एक परीक्षण कोड (जैसे 123456 ) दर्ज करें।

यदि signInWithPhoneNumber verifyPhoneNumber में से एक के लिए एक परीक्षण फोन नंबर प्रदान करते हैं, तो वास्तव में कोई एसएमएस नहीं भेजा जाएगा। इसके बजाय आप सीधे PhoneAuthProvider को या signInWithPhoneNumber के पुष्टिकरण परिणाम हैंडलर के साथ परीक्षण कोड प्रदान कर सकते हैं।