Firebase से पुष्टि करने की मदद से, किसी उपयोगकर्ता को ईमेल भेजकर साइन इन कराया जा सकता है. इस ईमेल में एक लिंक होता है, जिस पर क्लिक करके उपयोगकर्ता साइन इन कर सकता है. इस प्रोसेस में, उपयोगकर्ता के ईमेल पते की पुष्टि भी की जाती है.
ईमेल की मदद से साइन इन करने के कई फ़ायदे हैं:
- आसानी से साइन अप और साइन इन किया जा सकता है.
- अलग-अलग ऐप्लिकेशन के लिए एक ही पासवर्ड इस्तेमाल करने का जोखिम कम होता है. ऐसा करने से, अच्छी तरह चुने गए पासवर्ड की सुरक्षा भी कमज़ोर हो सकती है.
- उपयोगकर्ता की पुष्टि की जा सकती है. साथ ही, यह भी पुष्टि की जा सकती है कि उपयोगकर्ता, ईमेल पते का असली मालिक है.
- साइन इन करने के लिए, उपयोगकर्ता के पास सिर्फ़ ऐसा ईमेल खाता होना चाहिए जिसे ऐक्सेस किया जा सके. इसके लिए, फ़ोन नंबर या सोशल मीडिया खाते का मालिकाना हक होना ज़रूरी नहीं है.
- उपयोगकर्ता, पासवर्ड दिए (या याद रखे) बिना सुरक्षित तरीके से साइन इन कर सकता है. मोबाइल डिवाइस पर पासवर्ड याद रखना मुश्किल हो सकता है.
- कोई मौजूदा उपयोगकर्ता, जिसने पहले ईमेल आइडेंटिफ़ायर (पासवर्ड या फ़ेडरेटेड) की मदद से साइन इन किया था, उसे सिर्फ़ ईमेल की मदद से साइन इन करने के लिए अपग्रेड किया जा सकता है. उदाहरण के लिए, अगर कोई उपयोगकर्ता अपना पासवर्ड भूल गया है, तो वह पासवर्ड रीसेट किए बिना भी साइन इन कर सकता है.
शुरू करने से पहले
अगर आपने पहले से ऐसा नहीं किया है, तो शुरू करने के लिए गाइड में दिया गया तरीका अपनाएं.
अपने Firebase प्रोजेक्ट के लिए, ईमेल लिंक की मदद से साइन इन करने की सुविधा चालू करें.
ईमेल लिंक की मदद से उपयोगकर्ताओं को साइन इन कराने के लिए, आपको अपने Firebase प्रोजेक्ट के लिए, ईमेल प्रोवाइडर और ईमेल लिंक की मदद से साइन इन करने का तरीका चालू करना होगा:
Firebase console में, सुरक्षा > पुष्टि करने की सुविधा पर जाएं.
साइन इन करने का तरीका टैब में, ईमेल/पासवर्ड की मदद से साइन इन करने की सुविधा चालू करें. ध्यान दें कि ईमेल लिंक की मदद से साइन इन करने के लिए, ईमेल/पासवर्ड की मदद से साइन इन करने की सुविधा चालू होनी चाहिए.
इसी सेक्शन में, ईमेल लिंक (बिना पासवर्ड के साइन इन करें) की मदद से साइन इन करने की सुविधा चालू करें.
सेव करें पर क्लिक करें.
उपयोगकर्ता के ईमेल पते पर, पुष्टि करने के लिए लिंक भेजना
पुष्टि करने की प्रोसेस शुरू करने के लिए, ऐसा इंटरफ़ेस दिखाएं जिसमें उपयोगकर्ता से उसका ईमेल पता मांगा जाए. इसके बाद, Firebase से उपयोगकर्ता के ईमेल पर पुष्टि करने के लिए लिंक भेजने का अनुरोध करने के लिए, sendSignInLinkToEmail() को कॉल करें.
ActionCodeSettings ऑब्जेक्ट बनाएं. इससे Firebase को ईमेल लिंक बनाने के बारे में निर्देश मिलते हैं. ये फ़ील्ड सेट करें:
url: एम्बेड करने के लिए डीप लिंक और पास करने के लिए कोई भी अतिरिक्त स्थिति. अगर आपने पहले से ऐसा नहीं किया है, तो अनुमति वाले डोमेन की सूची में लिंक का डोमेन जोड़ें:Firebase console में, पुष्टि करने की सुविधा > सेटिंग टैब पर जाएं.
अनुमति वाले डोमेन सेक्शन में, डोमेन जोड़ें पर क्लिक करें. इसके बाद, लिंक का डोमेन जोड़ें.
अगर उपयोगकर्ता के डिवाइस पर ऐप्लिकेशन इंस्टॉल नहीं है और उसे इंस्टॉल नहीं किया जा सका, तो लिंक उपयोगकर्ता को इस यूआरएल पर रीडायरेक्ट करेगा.
androidPackageNameऔरIOSBundleId: Android या iOS डिवाइस पर साइन इन करने का लिंक खोलने पर इस्तेमाल किए जाने वाले ऐप्लिकेशन. मोबाइल ऐप्लिकेशन के ज़रिए, ईमेल ऐक्शन लिंक खोलने के लिए, Firebase डाइनैमिक लिंक को कॉन्फ़िगर करने के बारे में ज़्यादा जानें.handleCodeInApp: इसेtrueपर सेट करें. साइन इन करने की प्रोसेस हमेशा ऐप्लिकेशन में पूरी करनी होती है. ऐसा, ईमेल से जुड़ी अन्य कार्रवाइयों (पासवर्ड रीसेट करना और ईमेल की पुष्टि करना) के मामले में नहीं होता. ऐसा इसलिए, क्योंकि प्रोसेस के आखिर में, उपयोगकर्ता को साइन इन करना होता है और उसका पुष्टि करने की स्थिति, ऐप्लिकेशन में सेव हो जाती है.dynamicLinkDomain: (अब इस्तेमाल नहीं किया जाता,linkDomainका इस्तेमाल करें) अगर किसी प्रोजेक्ट के लिए, डाइनैमिक लिंक के कई कस्टम डोमेन तय किए गए हैं, तो यह तय करें कि किसी खास मोबाइल ऐप्लिकेशन (उदाहरण के लिए,example.page.link) का इस्तेमाल करके लिंक खोलने पर, कौनसा डोमेन इस्तेमाल किया जाए. ऐसा न करने पर, पहला डोमेन अपने-आप चुन लिया जाता है.linkDomain: लिंक को किसी खास मोबाइल ऐप्लिकेशन का इस्तेमाल करके खोलने पर, Firebase होस्टिंग का कोई वैकल्पिक कस्टम डोमेन इस्तेमाल किया जा सकता है. डोमेन को Firebase होस्टिंग में कॉन्फ़िगर किया जाना चाहिए और वह प्रोजेक्ट के मालिकाना हक में होना चाहिए. यह डिफ़ॉल्ट Hosting डोमेन (web.appयाfirebaseapp.com) नहीं हो सकता. यह, अब इस्तेमाल नहीं की जाने वालीdynamicLinkDomainसेटिंग की जगह लेता है.
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');उपयोगकर्ता से उसका ईमेल पता मांगें.
उपयोगकर्ता के ईमेल पर, पुष्टि करने के लिए लिंक भेजें. साथ ही, उपयोगकर्ता का ईमेल सेव करें, ताकि अगर उपयोगकर्ता उसी डिवाइस पर ईमेल की मदद से साइन इन करता है, तो उसे फिर से ईमेल पता न डालना पड़े.
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 Auth को साइन इन करने की प्रोसेस पूरी करते समय, उपयोगकर्ता का ईमेल पता चाहिए. साइन इन करने के लिए, यह ईमेल पता उस पते से मैच होना चाहिए जिस पर साइन इन करने का लिंक भेजा गया था.
अगर उपयोगकर्ता, साइन इन करने का लिंक उसी डिवाइस पर खोलता है जिससे उसने लिंक का अनुरोध किया था, तो इस प्रोसेस को आसान बनाया जा सकता है. इसके लिए, साइन इन करने का ईमेल भेजते समय, उपयोगकर्ता का ईमेल पता स्थानीय तौर पर सेव करें. उदाहरण के लिए, SharedPreferences का इस्तेमाल करें. इसके बाद, प्रोसेस पूरी करने के लिए इस पते का इस्तेमाल करें. रीडायरेक्ट यूआरएल पैरामीटर में, उपयोगकर्ता का ईमेल पता पास न करें और उसका फिर से इस्तेमाल न करें. ऐसा करने से, सेशन इंजेक्शन हो सकते हैं.
साइन इन करने की प्रोसेस पूरी होने के बाद, साइन इन करने के लिए इस्तेमाल किया गया ऐसा तरीका हटा दिया जाएगा जिसकी पुष्टि नहीं की गई है. साथ ही, मौजूदा सभी सेशन अमान्य हो जाएंगे. उदाहरण के लिए, अगर किसी व्यक्ति ने पहले उसी ईमेल और पासवर्ड से ऐसा खाता बनाया है जिसकी पुष्टि नहीं की गई है, तो उपयोगकर्ता का पासवर्ड हटा दिया जाएगा. ऐसा इसलिए किया जाएगा, ताकि वह व्यक्ति, जिसकी पहचान की पुष्टि नहीं की गई है और जिसने मालिकाना हक का दावा करके वह खाता बनाया है, पुष्टि न किए गए ईमेल और पासवर्ड से फिर से साइन इन न कर सके.
साथ ही, पक्का करें कि प्रोडक्शन में एचटीटीपीएस यूआरएल का इस्तेमाल किया जाए, ताकि इंटरमीडियरी सर्वर आपके लिंक को इंटरसेप्ट न कर सकें.
साइन इन करना
Firebase डाइनैमिक लिंक की सुविधा अब काम नहीं करती. अब साइन इन करने का लिंक भेजने के लिए, Firebase Hosting का इस्तेमाल किया जाता है. प्लेटफ़ॉर्म के हिसाब से कॉन्फ़िगरेशन के लिए, ये गाइड देखें:
ईमेल लिंक की पुष्टि करना और साइन इन करना
मोबाइल ऐप्लिकेशन के ज़रिए साइन इन करने की प्रोसेस पूरी करने के लिए, ऐप्लिकेशन को आने वाले ऐप्लिकेशन लिंक का पता लगाने, उसके डीप लिंक को पार्स करने, और फिर साइन इन करने के लिए कॉन्फ़िगर करना होगा.
अपने लिंक हैंडलर में, यह देखें कि लिंक, ईमेल लिंक की मदद से पुष्टि करने के लिए है या नहीं. अगर ऐसा है, तो साइन इन करने की प्रोसेस पूरी करें.
// 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.");
}
हालांकि, ऐसा हो सकता है कि प्रोसेस किसी दूसरे डिवाइस पर खत्म हो, जहां असली उपयोगकर्ता ने लॉग इन नहीं किया था. इसलिए, यह प्रोसेस पूरी नहीं हो सकती. ऐसे में, उपयोगकर्ता को गड़बड़ी दिखाई जा सकती है, ताकि वह उसी डिवाइस पर लिंक खोले. लिंक में कुछ स्थिति पास की जा सकती है, ताकि कार्रवाई के टाइप और उपयोगकर्ता के यूआईडी के बारे में जानकारी दी जा सके.
अब इस्तेमाल नहीं किया जाता: ईमेल-पासवर्ड और ईमेल लिंक में अंतर करना
अगर आपने अपना प्रोजेक्ट 15 सितंबर, 2023 को या उसके बाद बनाया है, तो ईमेल की गिनती से सुरक्षा की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इस सुविधा से, आपके प्रोजेक्ट के उपयोगकर्ता खातों की सुरक्षा बेहतर होती है. हालांकि, इससे fetchSignInMethodsForEmail() तरीका बंद हो जाता है. पहले, हम आइडेंटिफ़ायर-फ़र्स्ट फ़्लो लागू करने के लिए, इस तरीके का इस्तेमाल करने का सुझाव देते थे.
हालांकि, आपके पास अपने प्रोजेक्ट के लिए, ईमेल की गिनती से सुरक्षा की सुविधा बंद करने का विकल्प है. हालांकि, हमारा सुझाव है कि ऐसा न करें.
ज़्यादा जानकारी के लिए, ईमेल की गिनती से सुरक्षा के बारे में दस्तावेज़ देखें.
अगले चरण
जब कोई उपयोगकर्ता नया खाता बनाता है, तो यह खाता आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव हो जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. भले ही, उपयोगकर्ता ने साइन इन करने के लिए कौनसा तरीका इस्तेमाल किया हो.
अपने ऐप्लिकेशन में, User ऑब्जेक्ट से उपयोगकर्ता की बुनियादी प्रोफ़ाइल की जानकारी पाई जा सकती है. उपयोगकर्ताओं को मैनेज करना लेख देखें.
Firebase रीयलटाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, auth वैरिएबल से साइन इन किए हुए उपयोगकर्ता की यूनीक आईडी पाई जा सकती है. इसका इस्तेमाल, यह कंट्रोल करने के लिए किया जा सकता है कि कोई उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.
किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut() को कॉल करें:
await FirebaseAuth.instance.signOut();