Catch up on highlights from Firebase at Google I/O 2023. Learn more

एंड्रॉइड में ईमेल लिंक का उपयोग करके फायरबेस के साथ प्रमाणित करें

आप किसी उपयोगकर्ता को एक लिंक वाला ईमेल भेजकर साइन इन करने के लिए Firebase प्रमाणीकरण का उपयोग कर सकते हैं, जिस पर वे साइन इन करने के लिए क्लिक कर सकते हैं। इस प्रक्रिया में, उपयोगकर्ता का ईमेल पता भी सत्यापित किया जाता है।

ईमेल द्वारा साइन इन करने के अनेक लाभ हैं:

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

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

अपना Android प्रोजेक्ट सेट करें

  1. यदि आपने पहले से नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें

  2. अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल (आमतौर पर <project>/<app-module>/build.gradle ) में, फायरबेस ऑथेंटिकेशन एंड्रॉइड लाइब्रेरी के लिए निर्भरता जोड़ें। हम लाइब्रेरी वर्ज़निंग को नियंत्रित करने के लिए Firebase Android BoM का उपयोग करने की सलाह देते हैं।

    साथ ही, फायरबेस ऑथेंटिकेशन सेट अप करने के हिस्से के रूप में, आपको अपने ऐप में Google Play services SDK को जोड़ना होगा।

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:32.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.0'
    }

    Firebase Android BoM का उपयोग करके, आपका ऐप हमेशा Firebase Android पुस्तकालयों के संगत संस्करणों का उपयोग करेगा।

    (वैकल्पिक) BoM का उपयोग किए बिना Firebase लाइब्रेरी निर्भरताएँ जोड़ें

    यदि आप Firebase BoM का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक Firebase लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।

    ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए बीओएम का उपयोग करने की दृढ़ता से अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:22.0.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.0'
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:32.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.0'
    }

    Firebase Android BoM का उपयोग करके, आपका ऐप हमेशा Firebase Android पुस्तकालयों के संगत संस्करणों का उपयोग करेगा।

    (वैकल्पिक) BoM का उपयोग किए बिना Firebase लाइब्रेरी निर्भरताएँ जोड़ें

    यदि आप Firebase BoM का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक Firebase लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।

    ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए बीओएम का उपयोग करने की दृढ़ता से अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:22.0.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.0'
    }

उपयोगकर्ताओं को ईमेल लिंक द्वारा साइन इन करने के लिए, आपको पहले अपने फायरबेस प्रोजेक्ट के लिए ईमेल प्रदाता और ईमेल लिंक साइन-इन विधि को सक्षम करना होगा:

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

प्रमाणीकरण प्रवाह आरंभ करने के लिए, उपयोगकर्ता को एक इंटरफ़ेस के साथ प्रस्तुत करें जो उपयोगकर्ता को अपना ईमेल पता प्रदान करने के लिए संकेत देता है और फिर Firebase उपयोगकर्ता के ईमेल पर प्रमाणीकरण लिंक भेजने का अनुरोध करने के लिए sendSignInLinkToEmail को कॉल करता है।

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

    • url : एम्बेड करने के लिए डीप लिंक और पास की जाने वाली कोई अतिरिक्त अवस्था। लिंक के डोमेन को अधिकृत डोमेन की फायरबेस कंसोल सूची में श्वेतसूचीबद्ध करना होगा, जिसे साइन-इन विधि टैब (प्रमाणीकरण -> साइन-इन विधि) पर जाकर पाया जा सकता है। यदि ऐप उनके डिवाइस पर इंस्टॉल नहीं है और ऐप इंस्टॉल नहीं हो पा रहा है तो लिंक उपयोगकर्ता को इस यूआरएल पर रीडायरेक्ट करेगा।
    • androidPackageName और IOSBundleId : किसी Android या Apple डिवाइस पर साइन-इन लिंक खोले जाने पर उपयोग किए जाने वाले ऐप्स। मोबाइल एप्लिकेशन के माध्यम से ईमेल कार्रवाई लिंक खोलने के लिए फायरबेस डायनेमिक लिंक को कॉन्फ़िगर करने के तरीके के बारे में और जानें।
    • handleCodeInApp : सत्य पर सेट करें। अन्य आउट ऑफ बैंड ईमेल क्रियाओं (पासवर्ड रीसेट और ईमेल सत्यापन) के विपरीत साइन-इन ऑपरेशन को हमेशा ऐप में पूरा करना होता है। ऐसा इसलिए है, क्योंकि प्रवाह के अंत में, उपयोगकर्ता के साइन इन होने की उम्मीद की जाती है और ऐप के भीतर उनकी प्रामाणिक स्थिति बनी रहती है।
    • dynamicLinkDomain : जब एक प्रोजेक्ट के लिए कई कस्टम डायनेमिक लिंक डोमेन परिभाषित किए जाते हैं, तो निर्दिष्ट करें कि किसी निर्दिष्ट मोबाइल ऐप के माध्यम से लिंक खोले जाने पर किसका उपयोग करना है (उदाहरण के लिए, example.page.link )। अन्यथा पहला डोमेन स्वचालित रूप से चुना जाता है।

    Kotlin+KTX

    val actionCodeSettings = 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
        setIOSBundleId("com.example.ios")
        setAndroidPackageName(
            "com.example.android",
            true, // installIfNotAvailable
            "12", // minimumVersion
        )
    }

    Java

    ActionCodeSettings actionCodeSettings =
            ActionCodeSettings.newBuilder()
                    // URL you want to redirect back to. The domain (www.example.com) for this
                    // URL must be whitelisted in the Firebase Console.
                    .setUrl("https://www.example.com/finishSignUp?cartId=1234")
                    // This must be true
                    .setHandleCodeInApp(true)
                    .setIOSBundleId("com.example.ios")
                    .setAndroidPackageName(
                            "com.example.android",
                            true, /* installIfNotAvailable */
                            "12"    /* minimumVersion */)
                    .build();

    ActionCodeSettings के बारे में अधिक जानने के लिए, ईमेल क्रिया अनुभाग में पासिंग स्टेट देखें।

  2. उपयोगकर्ता से उनके ईमेल के लिए पूछें।

  3. उपयोगकर्ता के ईमेल पर प्रमाणीकरण लिंक भेजें, और यदि उपयोगकर्ता उसी डिवाइस पर ईमेल साइन-इन पूरा करता है तो उपयोगकर्ता के ईमेल को सहेजें।

    Kotlin+KTX

    Firebase.auth.sendSignInLinkToEmail(email, actionCodeSettings)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

    Java

    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.sendSignInLinkToEmail(email, actionCodeSettings)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Email sent.");
                    }
                }
            });

सुरक्षा चिंताएं

साइन-इन लिंक को एक अनपेक्षित उपयोगकर्ता के रूप में या किसी अनपेक्षित डिवाइस पर साइन-इन करने के लिए उपयोग किए जाने से रोकने के लिए, साइन-इन प्रवाह को पूरा करते समय फायरबेस ऑथ को उपयोगकर्ता का ईमेल पता प्रदान करने की आवश्यकता होती है। साइन-इन सफल होने के लिए, यह ईमेल पता उस पते से मेल खाना चाहिए जिस पर साइन-इन लिंक मूल रूप से भेजा गया था।

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

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

यह भी सुनिश्चित करें कि आप अपने लिंक को मध्यस्थ सर्वरों द्वारा संभावित रूप से बाधित होने से बचाने के लिए उत्पादन में एक HTTPS URL का उपयोग करें।

Android ऐप में साइन-इन पूरा करना

फायरबेस ऑथेंटिकेशन मोबाइल डिवाइस पर ईमेल लिंक भेजने के लिए फायरबेस डायनेमिक लिंक का उपयोग करता है। मोबाइल एप्लिकेशन के माध्यम से साइन-इन पूरा करने के लिए, आने वाले एप्लिकेशन लिंक का पता लगाने के लिए एप्लिकेशन को कॉन्फ़िगर करना होगा, अंतर्निहित डीप लिंक को पार्स करना होगा और फिर साइन-इन को पूरा करना होगा।

फायरबेस ऑथ मोबाइल एप्लिकेशन में खोले जाने वाले लिंक को भेजते समय फायरबेस डायनेमिक लिंक का उपयोग करता है। इस सुविधा का उपयोग करने के लिए, डायनेमिक लिंक को फायरबेस कंसोल में कॉन्फ़िगर किया जाना चाहिए

  1. फायरबेस डायनेमिक लिंक सक्षम करें:

    1. Firebase कंसोल में, डायनामिक लिंक अनुभाग खोलें।
    2. यदि आपने अभी तक डायनामिक लिंक शर्तों को स्वीकार नहीं किया है और डायनामिक लिंक्स डोमेन बनाया है, तो अभी ऐसा करें।

      यदि आपने पहले ही डायनेमिक लिंक्स डोमेन बना लिया है, तो इस पर ध्यान दें। एक डायनेमिक लिंक डोमेन आमतौर पर निम्न उदाहरण जैसा दिखता है:

      example.page.link

      जब आप इनकमिंग लिंक को इंटरसेप्ट करने के लिए अपने Apple या Android ऐप को कॉन्फ़िगर करते हैं तो आपको इस मान की आवश्यकता होगी।

  2. Android एप्लिकेशन कॉन्फ़िगर करना:

    1. अपने Android एप्लिकेशन से इन लिंक को प्रबंधित करने के लिए, Android पैकेज नाम को Firebase कंसोल प्रोजेक्ट सेटिंग में निर्दिष्ट करने की आवश्यकता है। इसके अलावा, आवेदन प्रमाणपत्र के SHA-1 और SHA-256 प्रदान करने की आवश्यकता है।
    2. अब जब आपने एक डायनेमिक लिंक डोमेन जोड़ लिया है और यह सुनिश्चित कर लिया है कि आपका एंड्रॉइड ऐप सही तरीके से कॉन्फ़िगर किया गया है, तो डायनेमिक लिंक लॉन्चर गतिविधि से शुरू होकर आपके एप्लिकेशन पर रीडायरेक्ट करेगा।
    3. यदि आप डायनेमिक लिंक को किसी विशिष्ट गतिविधि पर रीडायरेक्ट करना चाहते हैं, तो आपको अपनी AndroidManifest.xml फ़ाइल में एक इंटेंट फ़िल्टर कॉन्फ़िगर करना होगा। यह इंटेंट फ़िल्टर में आपके डायनेमिक लिंक डोमेन या ईमेल एक्शन हैंडलर को निर्दिष्ट करके किया जा सकता है। डिफ़ॉल्ट रूप से, ईमेल एक्शन हैंडलर को निम्नलिखित उदाहरण की तरह एक डोमेन पर होस्ट किया जाता है:
      PROJECT_ID.firebaseapp.com/
    4. चेतावनी:
      1. अपने इंटेंट फ़िल्टर में ActionCodeSettings पर सेट किया गया URL निर्दिष्ट न करें।
      2. अपना डायनामिक लिंक डोमेन बनाते समय आपने एक छोटा URL लिंक भी बनाया होगा। यह छोटा यूआरएल पास नहीं होगा; android:pathPrefix विशेषता के साथ इसे पकड़ने के लिए अपने आशय फ़िल्टर को कॉन्फ़िगर करें। इसका मतलब है कि आप अपने एप्लिकेशन के विभिन्न हिस्सों में अलग-अलग डायनेमिक लिंक नहीं पकड़ पाएंगे। हालांकि, आप यह देखने के लिए लिंक में mode क्वेरी पैरामीटर की जांच कर सकते हैं कि कौन सा ऑपरेशन करने का प्रयास किया जा रहा है, या एसडीके विधियों का उपयोग करें जैसे isSignInWithEmailLink यह देखने के लिए कि आपके ऐप को प्राप्त लिंक वह करता है जो आप चाहते हैं।
    5. डायनेमिक लिंक प्राप्त करने के बारे में अधिक जानकारी के लिए, Android डायनेमिक लिंक निर्देश प्राप्त करना देखें।

ऊपर बताए अनुसार लिंक प्राप्त करने के बाद, सत्यापित करें कि यह ईमेल लिंक प्रमाणीकरण के लिए है और साइन इन पूरा करें।

Kotlin+KTX

val auth = Firebase.auth
val intent = intent
val emailLink = intent.data.toString()

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    val email = "someemail@domain.com"

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Successfully signed in with email link!")
                val result = task.result
                // You can access the new user via result.getUser()
                // Additional user info profile *not* available via:
                // result.getAdditionalUserInfo().getProfile() == null
                // You can check if the user is new or existing:
                // result.getAdditionalUserInfo().isNewUser()
            } else {
                Log.e(TAG, "Error signing in with email link", task.exception)
            }
        }
}

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
Intent intent = getIntent();
String emailLink = intent.getData().toString();

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    String email = "someemail@domain.com";

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Successfully signed in with email link!");
                        AuthResult result = task.getResult();
                        // You can access the new user via result.getUser()
                        // Additional user info profile *not* available via:
                        // result.getAdditionalUserInfo().getProfile() == null
                        // You can check if the user is new or existing:
                        // result.getAdditionalUserInfo().isNewUser()
                    } else {
                        Log.e(TAG, "Error signing in with email link", task.getException());
                    }
                }
            });
}

Apple एप्लिकेशन में ईमेल लिंक के साथ साइन-इन को हैंडल करने के तरीके के बारे में अधिक जानने के लिए, Apple प्लेटफ़ॉर्म गाइड देखें।

वेब एप्लिकेशन में ईमेल लिंक के साथ साइन-इन को हैंडल करने के तरीके के बारे में जानने के लिए, वेब गाइड देखें।

आप प्रमाणीकरण के इस तरीके को किसी मौजूदा उपयोगकर्ता से भी जोड़ सकते हैं। उदाहरण के लिए, पहले से किसी अन्य प्रदाता के साथ प्रमाणित उपयोगकर्ता, जैसे फ़ोन नंबर, साइन-इन की इस विधि को अपने मौजूदा खाते में जोड़ सकता है।

अंतर ऑपरेशन के दूसरे भाग में होगा:

Kotlin+KTX

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Link the credential to the current user.
Firebase.auth.currentUser!!.linkWithCredential(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Successfully linked emailLink credential!")
            val result = task.result
            // You can access the new user via result.getUser()
            // Additional user info profile *not* available via:
            // result.getAdditionalUserInfo().getProfile() == null
            // You can check if the user is new or existing:
            // result.getAdditionalUserInfo().isNewUser()
        } else {
            Log.e(TAG, "Error linking emailLink credential", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Link the credential to the current user.
auth.getCurrentUser().linkWithCredential(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Successfully linked emailLink credential!");
                    AuthResult result = task.getResult();
                    // You can access the new user via result.getUser()
                    // Additional user info profile *not* available via:
                    // result.getAdditionalUserInfo().getProfile() == null
                    // You can check if the user is new or existing:
                    // result.getAdditionalUserInfo().isNewUser()
                } else {
                    Log.e(TAG, "Error linking emailLink credential", task.getException());
                }
            }
        });

संवेदनशील ऑपरेशन चलाने से पहले इसका उपयोग ईमेल लिंक उपयोगकर्ता को फिर से प्रमाणित करने के लिए भी किया जा सकता है।

Kotlin+KTX

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Re-authenticate the user with this credential.
Firebase.auth.currentUser!!.reauthenticateAndRetrieveData(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            // User is now successfully reauthenticated
        } else {
            Log.e(TAG, "Error reauthenticating", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Re-authenticate the user with this credential.
auth.getCurrentUser().reauthenticateAndRetrieveData(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // User is now successfully reauthenticated
                } else {
                    Log.e(TAG, "Error reauthenticating", task.getException());
                }
            }
        });

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

यदि आप ईमेल के साथ पासवर्ड और लिंक-आधारित साइन इन दोनों का समर्थन करते हैं, तो पासवर्ड/लिंक उपयोगकर्ता के लिए साइन इन की विधि को अलग करने के लिए, fetchSignInMethodsForEmail का उपयोग करें। यह पहचानकर्ता-पहले प्रवाह के लिए उपयोगी है जहां उपयोगकर्ता को पहले अपना ईमेल प्रदान करने के लिए कहा जाता है और फिर साइन-इन की विधि प्रस्तुत की जाती है:

Kotlin+KTX

Firebase.auth.fetchSignInMethodsForEmail(email)
    .addOnSuccessListener { result ->
        val signInMethods = result.signInMethods!!
        if (signInMethods.contains(EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD)) {
            // User can sign in with email/password
        } else if (signInMethods.contains(EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD)) {
            // User can sign in with email/link
        }
    }
    .addOnFailureListener { exception ->
        Log.e(TAG, "Error getting sign in methods for user", exception)
    }

Java

auth.fetchSignInMethodsForEmail(email)
        .addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
            @Override
            public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                if (task.isSuccessful()) {
                    SignInMethodQueryResult result = task.getResult();
                    List<String> signInMethods = result.getSignInMethods();
                    if (signInMethods.contains(EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD)) {
                        // User can sign in with email/password
                    } else if (signInMethods.contains(EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD)) {
                        // User can sign in with email/link
                    }
                } else {
                    Log.e(TAG, "Error getting sign in methods for user", task.getException());
                }
            }
        });

जैसा ऊपर बताया गया है ईमेल/पासवर्ड और ईमेल/लिंक को साइन-इन के विभिन्न तरीकों के साथ एक ही EmailAuthProvider (समान PROVIDER_ID ) माना जाता है।

अगले कदम

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

  • अपने ऐप्लिकेशन में, आप FirebaseUser ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।

  • आपके फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की विशिष्ट उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके उपयोगकर्ताओं को एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();