फ़ोन नंबर की पुष्टि

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

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

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

सेटअप

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

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

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

इस्तेमाल

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

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