ईमेल लिंक का इस्तेमाल करके Firebase से पुष्टि करें

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

ईमेल से साइन इन करने के कई फ़ायदे हैं:

  • साइन-अप और साइन-इन करने में आसानी होती है.
  • अलग-अलग ऐप्लिकेशन में पासवर्ड के दोबारा इस्तेमाल होने का जोखिम कम होता है. इससे सुरक्षा को खतरा हो सकता है अच्छी तरह से चुने गए पासवर्ड की भी ज़रूरत नहीं पड़ती.
  • उपयोगकर्ता को प्रमाणित करने की क्षमता, साथ ही यह भी सत्यापित करने की क्षमता कि उपयोगकर्ता ईमेल पते का असली मालिक.
  • साइन इन करने के लिए, उपयोगकर्ता के पास सिर्फ़ एक ऐसा ईमेल खाता होना चाहिए जिसे ऐक्सेस किया जा सके. फ़ोन नंबर या सोशल मीडिया खाते की जानकारी देना ज़रूरी है.
  • उपयोगकर्ता के पास सुरक्षित तरीके से साइन इन करने का विकल्प होता है. इसके लिए, उसे यह किसी मोबाइल डिवाइस पर मुश्किल हो सकता है.
  • कोई मौजूदा उपयोगकर्ता जिसने पहले ईमेल आइडेंटिफ़ायर (पासवर्ड) का इस्तेमाल करके साइन इन किया था या फ़ेडरेटेड) का उपयोग करके सिर्फ़ ईमेल से प्रवेश किया जा सकता है. उदाहरण के लिए, जो उपयोगकर्ता अपना पासवर्ड भूल गए हैं वे अब भी साइन इन कर सकते हैं अपना पासवर्ड रीसेट करें.

शुरू करने से पहले

  1. अगर आपने पहले से ऐसा नहीं किया है, तो शुरू करें गाइड में दिए गए निर्देशों का पालन करें.

  2. अपने Firebase प्रोजेक्ट के लिए ईमेल लिंक में साइन-इन करने की सुविधा चालू करें.

    ईमेल लिंक से उपयोगकर्ताओं में साइन इन करने के लिए, आपको पहले ईमेल की सेवा देने वाली कंपनी को चालू करना होगा और ईमेल लिंक से साइन इन करने का तरीका:

    1. Firebase कंसोल में, पुष्टि करें सेक्शन खोलें.
    2. साइन इन करने का तरीका टैब पर, ईमेल/पासवर्ड की सेवा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक का इस्तेमाल करने के लिए, ईमेल/पासवर्ड से साइन-इन करने की सुविधा चालू होनी चाहिए साइन-इन करें.
    3. इसी सेक्शन में, ईमेल लिंक (बिना पासवर्ड के साइन इन करने के लिए) की सुविधा चालू करें साइन-इन करने का तरीका.
    4. सेव करें पर क्लिक करें.

पुष्टि करने की प्रक्रिया शुरू करने के लिए, एक ऐसा इंटरफ़ेस प्रज़ेंट करें जो उपयोगकर्ता से उसका ईमेल पता देने के लिए कहता हो. इसके बाद, sendSignInLinkToEmail() को कॉल करके अनुरोध करें कि Firebase, उपयोगकर्ता के ईमेल पर पुष्टि करने का लिंक भेजे.

  1. ActionCodeSettings ऑब्जेक्ट को बनाएं, जो Firebase को ईमेल लिंक बनाने के तरीके के बारे में निर्देश देता है. नीचे दिए गए फ़ील्ड सेट करें:

    • url: एम्बेड करने के लिए डीप लिंक और पास की जाने वाली कोई दूसरी स्थिति. लिंक के डोमेन को अनुमति वाले डोमेन की 'Firebase कंसोल' सूची में वाइटलिस्ट होना चाहिए. इस सूची को 'साइन-इन करने का तरीका' टैब (पुष्टि करने -> साइन-इन करने का तरीका) पर जाकर मिल सकता है. अगर ऐप्लिकेशन उसके डिवाइस पर इंस्टॉल नहीं है और उसे इंस्टॉल नहीं किया जा सका, तो लिंक, उस व्यक्ति को इस यूआरएल पर रीडायरेक्ट कर देगा.

    • androidPackageName और IOSBundleId: किसी Android या iOS डिवाइस पर साइन-इन लिंक खोलने पर इस्तेमाल किए जाने वाले ऐप्लिकेशन. मोबाइल ऐप्लिकेशन की मदद से ईमेल कार्रवाई के लिंक खोलने के लिए, Firebase डाइनैमिक लिंक को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानें.

    • handleCodeInApp: true पर सेट करें. साइन-इन की यह कार्रवाई, हमेशा ऐप्लिकेशन में पूरी की जानी चाहिए. बैंड के बाहर की जाने वाली अन्य ईमेल कार्रवाइयों (पासवर्ड रीसेट और ईमेल की पुष्टि करना) से अलग. ऐसा इसलिए होता है, क्योंकि फ़्लो के आखिर में यह उम्मीद की जाती है कि उपयोगकर्ता ने साइन इन किया होगा और ऐप्लिकेशन में अनुमति की स्थिति बनी रहेगी.

    • dynamicLinkDomain: जब किसी प्रोजेक्ट के लिए एक से ज़्यादा कस्टम डाइनैमिक लिंक डोमेन तय किए जाते हैं, तो यह बताएं कि किसी मोबाइल ऐप्लिकेशन (जैसे, example.page.link) के ज़रिए लिंक खोलने के लिए, किस डोमेन का इस्तेमाल करना है. ऐसा न करने पर, पहला डोमेन अपने-आप चुन लिया जाता है.

    var acs = ActionCodeSettings(
        // URL you want to redirect back to. The domain (www.example.com) for this
        // URL must be whitelisted in the Firebase Console.
        url: 'https://www.example.com/finishSignUp?cartId=1234',
        // This must be true
        handleCodeInApp: true,
        iOSBundleId: 'com.example.ios',
        androidPackageName: 'com.example.android',
        // installIfNotAvailable
        androidInstallApp: true,
        // minimumVersion
        androidMinimumVersion: '12');
    
  2. उपयोगकर्ता से उसका ईमेल मांगें.

  3. पुष्टि करने के लिंक को उपयोगकर्ता के ईमेल पर भेजें. साथ ही, उपयोगकर्ता के ईमेल पते को सेव करें, क्योंकि हो सकता है कि उपयोगकर्ता उसी डिवाइस पर ईमेल से साइन इन कर ले.

    var emailAuth = 'someemail@domain.com';
    FirebaseAuth.instance.sendSignInLinkToEmail(
            email: emailAuth, actionCodeSettings: acs)
        .catchError((onError) => print('Error sending email verification $onError'))
        .then((value) => print('Successfully sent email verification'));
    });
    

सुरक्षा से जुड़ी समस्याएं

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

आपके पास इस फ़्लो को उन उपयोगकर्ताओं के लिए आसान बनाने का विकल्प है जो उसी पर साइन-इन करने का लिंक खोलते हैं उस डिवाइस पर लिंक का अनुरोध करते हैं, जो उनके ईमेल पते को स्थानीय रूप से संग्रहित करके - के लिए जब आप साइन-इन ईमेल भेजते हैं तो SharedPreferences का उपयोग करके, इंस्टेंस को कस्टमाइज़ कर सकते हैं. इसके बाद, फ़्लो को पूरा करने के लिए, इस पते का इस्तेमाल करें. रीडायरेक्ट यूआरएल पैरामीटर में उपयोगकर्ता का ईमेल पता पास न करें और इसे इस तौर पर फिर से इस्तेमाल करें यह सेशन इंजेक्शन को चालू कर सकता है.

साइन-इन पूरा होने के बाद, साइन-इन करने का कोई भी वह तरीका, जिसकी पुष्टि नहीं हुई है उपयोगकर्ता से हटा दिया जाएगा और सभी मौजूदा सेशन अमान्य हो जाएंगे. उदाहरण के लिए, अगर किसी ने पहले भी उसी खाते का इस्तेमाल करके, ऐसा खाता बनाया था जिसकी पुष्टि नहीं हुई है तो उपयोगकर्ता का पासवर्ड हटा दिया जाएगा, ताकि किसी दूसरे व्यक्ति के नाम पर काम करने वाला व्यक्ति, जिसने मालिकाना हक पर दावा किया और उसने वह खाता बनाया जिसकी पुष्टि नहीं हुई है पुष्टि नहीं किए गए ईमेल और पासवर्ड के साथ फिर से साइन इन करना.

यह भी पक्का करें कि प्रोडक्शन में एचटीटीपीएस यूआरएल का इस्तेमाल किया जा रहा हो, ताकि आपका लिंक इंटरमीडियरी सर्वर की मदद से रोका जा सकता है.

Firebase से पुष्टि करने की सुविधा, मोबाइल डिवाइस पर ईमेल का लिंक भेजने के लिए Firebase डाइनैमिक लिंक का इस्तेमाल करती है. मोबाइल ऐप्लिकेशन से साइन-इन की प्रोसेस पूरी करने के लिए, ऐप्लिकेशन को इस तरह से कॉन्फ़िगर करना होगा कि वह आने वाले ऐप्लिकेशन लिंक का पता लगा सके. साथ ही, दिए गए डीप लिंक को पार्स कर सके और फिर साइन-इन की प्रक्रिया पूरी कर सके.

  1. गाइड में Flutter पर डाइनैमिक लिंक पाने के लिए अपना ऐप्लिकेशन सेट अप करें.

  2. अपने लिंक हैंडलर में, देखें कि लिंक का इस्तेमाल ईमेल लिंक की पुष्टि करने के लिए किया गया है या नहीं. अगर ऐसा है, तो साइन इन की प्रक्रिया पूरी करें.

    // Confirm the link is a sign-in with email link.
    if (FirebaseAuth.instance.isSignInWithEmailLink(emailLink)) {
      try {
        // The client SDK will parse the code from the link for you.
        final userCredential = await FirebaseAuth.instance
            .signInWithEmailLink(email: emailAuth, emailLink: emailLink);
    
        // You can access the new user via userCredential.user.
        final emailAddress = userCredential.user?.email;
    
        print('Successfully signed in with email link!');
      } catch (error) {
        print('Error signing in with email link.');
      }
    }
    

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

अंतर कार्रवाई के दूसरे आधे हिस्से में होगा:

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.linkWithCredential(authCredential);
} catch (error) {
    print("Error linking emailLink credential.");
}

इसका इस्तेमाल किसी ईमेल लिंक उपयोगकर्ता की फिर से पुष्टि करने के लिए भी किया जा सकता है. संवेदनशील कार्रवाई.

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.reauthenticateWithCredential(authCredential);
} catch (error) {
    print("Error reauthenticating credential.");
}

हालांकि, फ़्लो किसी ऐसे डिवाइस पर खत्म हो सकता है जहां मूल उपयोगकर्ता लॉग इन नहीं किया गया था, तो शायद यह फ़्लो पूरा नहीं हुआ है. इस स्थिति में, गड़बड़ी होने की वजह से उपयोगकर्ता को उसी डिवाइस पर लिंक खोलने के लिए ज़बरदस्ती दिखाएं. कुछ सूचनाएं मिल रही हैं कार्रवाई के टाइप के बारे में जानकारी देने के लिए, लिंक में स्टेट पास किया जा सकता है और उपयोगकर्ता के Uid की जानकारी देनी होगी.

अगर आपने अपना प्रोजेक्ट 15 सितंबर, 2023 या उसके बाद बनाया है, तो ईमेल की गिनती करें सुरक्षा की सुविधा डिफ़ॉल्ट रूप से चालू रहती है. यह सुविधा आपकी उपयोगकर्ता खाते को ऐक्सेस करने की अनुमति देता है, लेकिन इससे fetchSignInMethodsForEmail() का इस्तेमाल किया जाता है. आइडेंटिफ़ायर के लिए पहले फ़्लो को लागू करने का सुझाव हम पहले देते थे.

हालांकि, आपके प्रोजेक्ट के लिए ईमेल गिनती सुरक्षा को बंद किया जा सकता है, लेकिन हम ऐसा न करने की सलाह दी जाती है.

ईमेल एन्यूमरेशन सुरक्षा से जुड़ा दस्तावेज़ देखें देखें.

अगले चरण

जब कोई उपयोगकर्ता नया खाता बना लेता है, तो इस खाते को आपके Firebase प्रोजेक्ट बनाया जा सकता है. इसकी मदद से, आपके ऐप्लिकेशन में मौजूद हर ऐप्लिकेशन पर उपयोगकर्ता की पहचान की जा सकती है प्रोजेक्ट के लिए बनाया गया है, चाहे उपयोगकर्ता ने साइन-इन करने के लिए किस तरीके का इस्तेमाल किया हो.

अपने ऐप्लिकेशन में, उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी को User ऑब्जेक्ट. उपयोगकर्ताओं को मैनेज करना देखें.

अपने Firebase रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, ये काम किए जा सकते हैं auth वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी पाएं. इसके बाद, इसका इस्तेमाल इन कामों के लिए करें तय करें कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.

उपयोगकर्ताओं को, पुष्टि करने के एक से ज़्यादा तरीके का इस्तेमाल करके, अपने ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है पुष्टि करने वाले के क्रेडेंशियल जोड़कर) सेवा देने वाली कंपनियों के साथ मौजूदा उपयोगकर्ता खाते में साइन इन करें.

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut() पर कॉल करें:

await FirebaseAuth.instance.signOut();