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

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

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

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

सेटअप

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

  1. Firebase console में, सुरक्षा > पुष्टि करने की सुविधा पर जाएं.

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

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

इस्तेमाल

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 आर्ग्युमेंट में, रीसेंड टोकन के साथ 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 विजेट दिखेगा. एसएमएस कोड भेजे जाने से पहले, उपयोगकर्ता को टेस्ट पूरा करना होगा. टेस्ट पूरा होने के बाद, उपयोगकर्ता को साइन इन कराया जा सकता है. इसके लिए, हल किए गए ConfirmationResult जवाब पर, confirm तरीके को एसएमएस कोड दें:

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 console पर, "फ़ोन" से पुष्टि करने की सुविधा देने वाले प्लैटफ़ॉर्म को चुनें. इसके बाद, "जांच के लिए फ़ोन नंबर" ड्रॉपडाउन पर क्लिक करें.
  2. कोई नया फ़ोन नंबर (जैसे, +44 7444 555666) और जांच के लिए कोड (जैसे, 123456) डालें.

verifyPhoneNumber या signInWithPhoneNumber तरीकों में से किसी एक में, जांच के लिए फ़ोन नंबर डालने पर, कोई एसएमएस नहीं भेजा जाएगा. इसके बजाय, जांच के लिए कोड को सीधे PhoneAuthProvider या signInWithPhoneNumber के पुष्टि के नतीजे के हैंडलर में डाला जा सकता है.