फ़ोन से पुष्टि करें

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

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

Firebase फ़ोन ऑथेंटिकेशन की सुविधा, सभी देशों में उपलब्ध नहीं है. ज़्यादा जानकारी के लिए, कृपया उनके अक्सर पूछे जाने वाले सवाल देखें.

सेटअप

फ़ोन से पुष्टि करने की सुविधा का इस्तेमाल शुरू करने से पहले, पक्का करें कि आपने यह तरीका अपनाया हो:

  1. Firebase console में, Security > Authentication पर जाएं.

  2. साइन इन करने का तरीका टैब में जाकर, फ़ोन से साइन इन करने की सुविधा देने वाली कंपनी को चालू करें.

  3. प्लैटफ़ॉर्म के हिसाब से ज़रूरी शर्तें सेट अप करें:

    • iOS+: Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफ़िकेशन चालू करें. साथ ही, पक्का करें कि आपका APNs ऑथेंटिकेशन कुंजी, Firebase क्लाउड से मैसेज (FCM) के साथ कॉन्फ़िगर की गई हो. इसके अलावा, आपको रिमोट सूचनाओं के लिए, बैकग्राउंड मोड चालू करना होगा.

      इस चरण के बारे में ज़्यादा जानकारी के लिए, Firebase iOS Phone Auth का दस्तावेज़ देखें.

    • Android: अगर आपने अब तक अपने ऐप्लिकेशन का SHA-1 फ़िंगरप्रिंट नहीं दिया है, तो इसे दें:

      1. Firebase कंसोल में, सेटिंग > सामान्य टैब पर जाएं.

      2. नीचे की ओर स्क्रोल करके आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, अपना Android ऐप्लिकेशन चुनें और SHA सर्टिफ़िकेट फ़िंगरप्रिंट फ़ील्ड में अपना SHA-1 फ़िंगरप्रिंट जोड़ें.

      अपने ऐप्लिकेशन के SHA फ़िंगरप्रिंट को पाने के तरीके के बारे में जानने के लिए, अपने क्लाइंट की पुष्टि करना लेख पढ़ें.

    • वेब: अगर आपने अब तक अपने ऐप्लिकेशन के डोमेन को अनुमति नहीं दी है, तो ऐसा करें:

      1. Firebase console में, सुरक्षा> पुष्टि करें > सेटिंग टैब पर जाएं.

      2. अनुमति वाले डोमेन सेक्शन में जाकर, डोमेन जोड़ें पर क्लिक करें. इसके बाद, अपना डोमेन जोड़ें.

इस्तेमाल

Flutter के लिए Firebase से पुष्टि करने वाला SDK टूल, किसी उपयोगकर्ता को उसके फ़ोन नंबर से साइन इन करने के दो अलग-अलग तरीके उपलब्ध कराता है. नेटिव (जैसे, Android और iOS) प्लैटफ़ॉर्म, वेब की तुलना में फ़ोन नंबर की पुष्टि करने के लिए अलग-अलग सुविधाएं देते हैं. इसलिए, हर प्लैटफ़ॉर्म के लिए खास तौर पर दो तरीके उपलब्ध हैं:

  • नेटिव प्लैटफ़ॉर्म: 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) {},
);

आपको चार अलग-अलग कॉलबैक हैंडल करने होंगे. इनसे यह तय होगा कि ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को कैसे अपडेट किया जाए:

  1. verificationCompleted: Android डिवाइसों पर एसएमएस कोड को अपने-आप मैनेज करने की सुविधा.
  2. verificationFailed: पुष्टि न होने पर होने वाले इवेंट को मैनेज करें. जैसे, अमान्य फ़ोन नंबर या एसएमएस कोटा खत्म हो गया है.
  3. codeSent: इस इवेंट का इस्तेमाल तब किया जाता है, जब Firebase से डिवाइस पर कोड भेजा गया हो. इसका इस्तेमाल, उपयोगकर्ताओं को कोड डालने के लिए प्रॉम्प्ट करने के लिए किया जाता है.
  4. codeAutoRetrievalTimeout: जब एसएमएस कोड अपने-आप हैंडल नहीं हो पाता, तब टाइम आउट को हैंडल करता है.

verificationCompleted

इस हैंडलर को सिर्फ़ उन Android डिवाइसों पर कॉल किया जाएगा जिन पर एसएमएस कोड अपने-आप भरने की सुविधा काम करती है.

जब डिवाइस पर एसएमएस कोड डिलीवर हो जाता है, तो Android अपने-आप एसएमएस कोड की पुष्टि कर लेगा. इसके लिए, उपयोगकर्ता को मैन्युअल रूप से कोड डालने की ज़रूरत नहीं होगी. अगर यह इवेंट होता है, तो 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);
  },
);

verificationFailed

अगर Firebase कोई गड़बड़ी दिखाता है, जैसे कि गलत फ़ोन नंबर या प्रोजेक्ट के लिए एसएमएस का कोटा खत्म हो गया है, तो इस हैंडलर को 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
  },
);

codeSent

जब Firebase, डिवाइस पर एसएमएस कोड भेजता है, तब यह हैंडलर verificationId और resendToken के साथ ट्रिगर होता है. resendToken सिर्फ़ Android डिवाइसों पर काम करता है. iOS डिवाइस हमेशा null वैल्यू दिखाता है.

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

डिफ़ॉल्ट रूप से, अगर हाल ही में कोई नया एसएमएस मैसेज भेजा गया है, तो Firebase उसे फिर से नहीं भेजेगा. हालांकि, forceResendingToken आर्ग्युमेंट में resend टोकन के साथ verifyPhoneNumber तरीके को फिर से कॉल करके, इस व्यवहार को बदला जा सकता है. अगर यह प्रोसेस पूरी हो जाती है, तो एसएमएस मैसेज फिर से भेजा जाएगा.

codeAutoRetrievalTimeout

Android डिवाइसों पर, एसएमएस कोड अपने-आप भरने की सुविधा काम करती है. अगर डिवाइस पर तय समय में एसएमएस अपने-आप नहीं भरता है, तो इस हैंडलर को कॉल किया जाएगा. समयसीमा खत्म होने के बाद, डिवाइस पर आने वाले किसी भी मैसेज को ठीक करने की कोशिश नहीं की जाएगी.

डिफ़ॉल्ट रूप से, डिवाइस 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 विजेट को पूरा करना होता है. पुष्टि हो जाने के बाद, आपको एसएमएस के ज़रिए कोड भेजा जाएगा.

Flutter के लिए Firebase से पुष्टि करने वाला SDK, 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');

इस तरीके को कॉल करने पर, सबसे पहले reCAPTCHA विजेट दिखेगा. एसएमएस कोड भेजने से पहले, उपयोगकर्ता को टेस्ट पूरा करना होगा. यह प्रोसेस पूरी होने के बाद, उपयोगकर्ता को साइन इन करने के लिए, confirm तरीके को एसएमएस कोड दिया जा सकता है. यह कोड, रिज़ॉल्व किए गए ConfirmationResult जवाब में मौजूद होता है:

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

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

reCAPTCHA कॉन्फ़िगरेशन

reCAPTCHA विजेट, पूरी तरह से मैनेज किया गया फ़्लो है. यह आपके वेब ऐप्लिकेशन को सुरक्षा देता है.

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 आर्ग्युमेंट को पसंद के मुताबिक बनाकर, साइज़ और थीम को बदला जा सकता है.

इवेंट भी सुने जा सकते हैं. जैसे, उपयोगकर्ता ने reCAPTCHA पूरा कर लिया है या नहीं, reCAPTCHA की समयसीमा खत्म हो गई है या कोई गड़बड़ी हुई है:

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

टेस्ट करना

Firebase, फ़ोन नंबरों को स्थानीय तौर पर टेस्ट करने की सुविधा देता है:

  1. Firebase कंसोल पर, "फ़ोन" ऑथेंटिकेशन प्रोवाइडर चुनें. इसके बाद, "जांच के लिए फ़ोन नंबर" ड्रॉपडाउन पर क्लिक करें.
  2. नया फ़ोन नंबर (जैसे, +44 7444 555666) और टेस्ट कोड (जैसे, 123456) डालें.

अगर verifyPhoneNumber या signInWithPhoneNumber तरीकों में से किसी एक के लिए टेस्ट फ़ोन नंबर दिया जाता है, तो कोई मैसेज (एसएमएस) नहीं भेजा जाएगा. इसके बजाय, टेस्ट कोड को सीधे PhoneAuthProvider या signInWithPhoneNumbers confirmation result handler को दिया जा सकता है.