Firebase से पुष्टि करने का इस्तेमाल करके, किसी उपयोगकर्ता को साइन इन करने के लिए ईमेल भेजा जा सकता है. इस ईमेल में एक लिंक होता है. इस लिंक पर क्लिक करके, उपयोगकर्ता साइन इन कर सकता है. इस प्रोसेस में, उपयोगकर्ता के ईमेल पते की भी पुष्टि की जाती है.
ईमेल पते से साइन इन करने के कई फ़ायदे हैं:
- आसानी से साइन-अप और साइन-इन करने की सुविधा.
- अलग-अलग ऐप्लिकेशन के लिए एक ही पासवर्ड इस्तेमाल करने का जोखिम कम हो जाता है. इससे, अच्छी तरह से चुने गए पासवर्ड की सुरक्षा भी कम हो सकती है.
- किसी उपयोगकर्ता की पुष्टि करने की सुविधा. साथ ही, यह पुष्टि करने की सुविधा कि उपयोगकर्ता, ईमेल पते का असली मालिक है.
- साइन इन करने के लिए, उपयोगकर्ता के पास सिर्फ़ एक ऐसा ईमेल खाता होना चाहिए जिसे ऐक्सेस किया जा सके. किसी फ़ोन नंबर या सोशल मीडिया खाते का मालिकाना हक होना ज़रूरी नहीं है.
- कोई उपयोगकर्ता बिना पासवर्ड डाले (या याद रखे) सुरक्षित तरीके से साइन इन कर सकता है. मोबाइल डिवाइस पर पासवर्ड डालना मुश्किल हो सकता है.
- मौजूदा उपयोगकर्ता, जिसने पहले ईमेल आइडेंटिफ़ायर (पासवर्ड या फ़ेडरेटेड) से साइन इन किया था उसे सिर्फ़ ईमेल से साइन इन करने के लिए अपग्रेड किया जा सकता है. उदाहरण के लिए, अगर किसी व्यक्ति को अपना पासवर्ड याद नहीं है, तो वह पासवर्ड रीसेट किए बिना भी साइन इन कर सकता है.
शुरू करने से पहले
Firebase डिपेंडेंसी इंस्टॉल और मैनेज करने के लिए, Swift Package Manager का इस्तेमाल करें.
- Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलें. इसके बाद, File > Add Packages पर जाएं.
- जब आपसे कहा जाए, तब Firebase Apple प्लैटफ़ॉर्म SDK टूल की रिपॉज़िटरी जोड़ें:
- Firebase Authentication लाइब्रेरी चुनें.
- अपने टारगेट की बिल्ड सेटिंग के Other Linker Flags सेक्शन में,
-ObjCफ़्लैग जोड़ें. - इसके बाद, Xcode आपके पैकेज की डिपेंडेंसी से जुड़ी समस्या को हल करना शुरू कर देगा और उन्हें बैकग्राउंड में डाउनलोड करेगा.
https://github.com/firebase/firebase-ios-sdk.git
अपने Firebase प्रोजेक्ट के लिए, ईमेल लिंक से साइन-इन करने की सुविधा चालू करना
ईमेल लिंक से उपयोगकर्ताओं को साइन इन करने की सुविधा चालू करने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए, ईमेल सेवा देने वाली कंपनी और ईमेल लिंक से साइन इन करने की सुविधा चालू करनी होगी:
Firebase console में, Security > Authentication पर जाएं.
साइन-इन का तरीका टैब में जाकर, ईमेल/पासवर्ड साइन-इन सेवा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक से साइन इन करने की सुविधा का इस्तेमाल करने के लिए, ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू होनी चाहिए.
उसी सेक्शन में, ईमेल लिंक (बिना पासवर्ड के साइन-इन करने की सुविधा) उपलब्ध कराने वाली सेवा चालू करें.
सेव करें पर क्लिक करें.
उपयोगकर्ता के ईमेल पते पर पुष्टि करने के लिए लिंक भेजना
पुष्टि करने का फ़्लो शुरू करने के लिए, उपयोगकर्ता को ऐसा इंटरफ़ेस दिखाएं जो
उपयोगकर्ता से उसका ईमेल पता मांगे. इसके बाद, sendSignInLink को कॉल करके अनुरोध करें कि Firebase, उपयोगकर्ता के ईमेल पते पर पुष्टि करने का लिंक भेजे.
ActionCodeSettingsऑब्जेक्ट बनाएं. यह ऑब्जेक्ट, Firebase को ईमेल लिंक बनाने के बारे में निर्देश देता है. इन फ़ील्ड को सेट करें:url: एम्बेड करने के लिए डीप लिंक और पास की जाने वाली कोई भी अतिरिक्त स्थिति. अगर आपने अभी तक ऐसा नहीं किया है, तो अनुमति वाले डोमेन की सूची में अपना डोमेन जोड़ें:Firebase कंसोल में, सुरक्षा > पुष्टि करें > सेटिंग टैब पर जाएं.
अनुमति वाले डोमेन सेक्शन में जाकर, डोमेन जोड़ें पर क्लिक करें. इसके बाद, अपना डोमेन जोड़ें.
iOSBundleIDऔरandroidPackageName: इससे Firebase Authentication को यह तय करने में मदद मिलती है कि उसे सिर्फ़ वेब के लिए लिंक बनाना चाहिए या मोबाइल लिंक बनाना चाहिए. मोबाइल लिंक को Android या Apple डिवाइस पर खोला जाता है.handleCodeInApp: इसे सही पर सेट करें. साइन इन करने की प्रोसेस हमेशा ऐप्लिकेशन में पूरी करनी होती है. हालांकि, पासवर्ड रीसेट करने और ईमेल की पुष्टि करने जैसी अन्य कार्रवाइयां, ऐप्लिकेशन के बाहर भी की जा सकती हैं. ऐसा इसलिए है, क्योंकि फ़्लो के आखिर में, उपयोगकर्ता को साइन इन करना होता है और ऐप्लिकेशन में उसकी पुष्टि की स्थिति बनी रहती है.linkDomain: किसी प्रोजेक्ट के लिए कस्टम Hosting लिंक डोमेन तय किए जाने पर, यह तय करें कि लिंक को किसी मोबाइल ऐप्लिकेशन से खोले जाने पर किस डोमेन का इस्तेमाल किया जाए. ऐसा न करने पर, डिफ़ॉल्ट डोमेन अपने-आप चुना जाता है. उदाहरण के लिए, .PROJECT_ID.firebaseapp.comdynamicLinkDomain: अब काम नहीं करता. इस पैरामीटर को तय न करें.
Swift
let actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://www.example.com") // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = true actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable: false, minimumVersion: "12")
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = YES; [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:NO minimumVersion:@"12"];
ActionCodeSettingsके बारे में ज़्यादा जानने के लिए, ईमेल में की जाने वाली कार्रवाइयों में स्थिति पास करना सेक्शन देखें.उपयोगकर्ता से उसका ईमेल पता मांगें.
उपयोगकर्ता के ईमेल पते पर पुष्टि करने का लिंक भेजें. साथ ही, उपयोगकर्ता के ईमेल पते को सेव करें, ताकि अगर वह उसी डिवाइस पर ईमेल से साइन-इन करता है, तो उसे आसानी हो.
Swift
Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in // ... if let error = error { self.showMessagePrompt(error.localizedDescription) return } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. UserDefaults.standard.set(email, forKey: "Email") self.showMessagePrompt("Check your email for link") // ... }
Objective-C
[[FIRAuth auth] sendSignInLinkToEmail:email actionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { // ... if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; [self showMessagePrompt:@"Check your email for link"]; // ... }];
ईमेल में मिले लिंक का इस्तेमाल करके साइन इन करें
सुरक्षा से जुड़ी समस्याएं
साइन-इन लिंक का इस्तेमाल, किसी ऐसे उपयोगकर्ता या डिवाइस पर साइन इन करने के लिए न किया जाए जिसके लिए लिंक नहीं भेजा गया है, इसके लिए Firebase Auth को साइन-इन फ़्लो पूरा करते समय उपयोगकर्ता का ईमेल पता चाहिए. साइन इन करने के लिए, यह ईमेल पता उस पते से मेल खाना चाहिए जिस पर साइन इन करने का लिंक भेजा गया था.
साइन-इन करने का ईमेल भेजते समय, उपयोगकर्ताओं के ईमेल पते को स्थानीय तौर पर सेव किया जा सकता है. इससे, उन उपयोगकर्ताओं के लिए साइन-इन करने की प्रोसेस को आसान बनाया जा सकता है जिन्होंने उसी डिवाइस पर साइन-इन करने का लिंक खोला है जिस पर उन्होंने लिंक का अनुरोध किया था. इसके बाद, इस पते का इस्तेमाल करके प्रोसेस पूरी करें.
साइन-इन की प्रोसेस पूरी होने के बाद, साइन-इन करने के ऐसे सभी तरीके हटा दिए जाएंगे जिनकी पुष्टि नहीं हुई है. साथ ही, मौजूदा सभी सेशन अमान्य हो जाएंगे. उदाहरण के लिए, अगर किसी व्यक्ति ने पहले उसी ईमेल और पासवर्ड से बिना पुष्टि किया गया खाता बनाया है, तो उस उपयोगकर्ता का पासवर्ड हटा दिया जाएगा. ऐसा इसलिए किया जाएगा, ताकि खाता वापस पाने का दावा करने वाला व्यक्ति, उसी खाते से फिर से साइन इन न कर पाए.
Apple के मोबाइल ऐप्लिकेशन में साइन-इन की प्रोसेस पूरी करना
Firebase Authentication, मोबाइल डिवाइस पर ईमेल लिंक भेजने के लिए Firebase Hosting का इस्तेमाल करता है. मोबाइल ऐप्लिकेशन से साइन-इन करने के लिए, ऐप्लिकेशन को इस तरह कॉन्फ़िगर करना होगा कि वह आने वाले ऐप्लिकेशन लिंक का पता लगा सके, उसके डीप लिंक को पार्स कर सके, और फिर साइन-इन की प्रोसेस पूरी कर सके. इसे पूरा करने के तरीके के बारे में ज़्यादा जानने के लिए, iOS पर यूनिवर्सल लिंक और उनसे जुड़े डोमेन के बारे में जानकारी देखें.
Firebase Hosting को कॉन्फ़िगर करें
Firebase Authentication, मोबाइल ऐप्लिकेशन में खोले जाने वाले लिंक को बनाने और भेजने के लिए, Firebase Hosting डोमेन का इस्तेमाल करता है. आपके लिए डिफ़ॉल्ट Firebase Hosting डोमेन पहले से ही कॉन्फ़िगर किया गया है.
Firebase Hosting डोमेन कॉन्फ़िगर करें:
Firebase console में, होस्टिंग और सर्वरलेस > होस्टिंग पर जाएं.
अगर आपको मोबाइल ऐप्लिकेशन में खुलने वाले ईमेल लिंक के लिए डिफ़ॉल्ट डोमेन का इस्तेमाल करना है, तो अपनी डिफ़ॉल्ट साइट पर जाएं और अपने डिफ़ॉल्ट Hosting डोमेन को नोट करें. डिफ़ॉल्ट Hosting डोमेन आम तौर पर इस तरह दिखता है:
.PROJECT_ID.firebaseapp.comआने वाले लिंक को इंटरसेप्ट करने के लिए, ऐप्लिकेशन को कॉन्फ़िगर करते समय आपको इस वैल्यू की ज़रूरत होगी.
अगर आपको ईमेल लिंक के लिए कस्टम डोमेन का इस्तेमाल करना है, तो Firebase Hosting के साथ रजिस्टर करें और लिंक के डोमेन के लिए उसका इस्तेमाल करें.
Apple के ऐप्लिकेशन कॉन्फ़िगर करना:
आपको चुने गए डोमेन को ऐप्लिकेशन लिंक के लिए, एसोसिएटेड डोमेन के तौर पर कॉन्फ़िगर करना होगा. अपने ऐप्लिकेशन में एनटाइटलमेंट सेट अप करने के लिए, Xcode में टारगेट का Signing & Capabilities टैब खोलें. इसके बाद, पिछले चरण में जोड़े गए Firebase Hosting डोमेन को Associated Domains की सुविधा में जोड़ें. डिफ़ॉल्ट Firebase Hosting डोमेन का इस्तेमाल करने पर, यह
होगा.applinks:PROJECT_ID.firebaseapp.comज़्यादा जानकारी के लिए, Apple की दस्तावेज़ साइट पर एसोसिएट किए गए डोमेन के बारे में जानकारी लेख पढ़ें.
लिंक की पुष्टि करना और साइन इन करना
ऊपर बताए गए तरीके से लिंक मिलने के बाद, पुष्टि करें कि यह ईमेल लिंक से पुष्टि करने के लिए है. इसके बाद, साइन इन करें.
Swift
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
Objective-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
Android ऐप्लिकेशन में, ईमेल लिंक से साइन इन करने की सुविधा को मैनेज करने के बारे में जानने के लिए, Android गाइड देखें.
वेब ऐप्लिकेशन में ईमेल लिंक की मदद से साइन-इन करने का तरीका जानने के लिए, वेब गाइड देखें.
ईमेल लिंक की मदद से लिंक करना/फिर से पुष्टि करना
पुष्टि करने के इस तरीके को किसी मौजूदा उपयोगकर्ता से भी लिंक किया जा सकता है. उदाहरण के लिए अगर किसी व्यक्ति ने पहले किसी दूसरे तरीके से पुष्टि की है, जैसे कि फ़ोन नंबर से, तो वह अपने मौजूदा खाते में साइन इन करने का यह तरीका जोड़ सकता है.
ऑपरेशन के दूसरे हिस्से में अंतर होगा:
Swift
let credential = EmailAuthCredential.credential(withEmail:email link:link) Auth.auth().currentUser?.link(with: credential) { authData, error in if (error) { // And error occurred during linking. return } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email link:link]; [FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during linking. return; } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }];
इसका इस्तेमाल, ईमेल लिंक का इस्तेमाल करने वाले व्यक्ति की फिर से पुष्टि करने के लिए भी किया जा सकता है. ऐसा तब किया जाता है, जब कोई संवेदनशील कार्रवाई करनी हो.
Swift
let credential = EmailAuthProvider.credential(withEmail:email link:link) Auth.auth().currentUser?.reauthenticate(with: credential) { authData, error in if (error) { // And error occurred during re-authentication. return } // The user was successfully re-authenticated. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthCredential credentialWithEmail:email link:link]; [FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during re-authentication return; } // The user was successfully re-authenticated. }];
हालांकि, ऐसा हो सकता है कि फ़्लो किसी ऐसे डिवाइस पर खत्म हो जाए जिस पर मूल उपयोगकर्ता ने लॉग इन न किया हो. इसलिए, यह फ़्लो पूरा नहीं हो सकता. ऐसे में, उपयोगकर्ता को एक गड़बड़ी का मैसेज दिखाया जा सकता है, ताकि उसे लिंक को उसी डिवाइस पर खोलने के लिए मजबूर किया जा सके. लिंक में कुछ स्टेट पास की जा सकती हैं, ताकि ऑपरेशन के टाइप और उपयोगकर्ता के यूआईडी के बारे में जानकारी दी जा सके.
बंद किया गया: Firebase Dynamic Links के आधार पर पुष्टि करने की सुविधा
Firebase Authentication iOS SDK v11.8.0 से पहले, ईमेल लिंक से साइन इन करने की सुविधा, सही ऐप्लिकेशन में साइन इन लिंक खोलने के लिए Firebase Dynamic Links पर निर्भर करती थी. पुष्टि करने वाले इन लिंक का इस्तेमाल अब नहीं किया जा सकेगा, क्योंकि Firebase Dynamic Links 25 अगस्त, 2025 को बंद हो जाएगा.
अगर आपका ऐप्लिकेशन, पुराने स्टाइल के लिंक का इस्तेमाल करता है, तो आपको अपने ऐप्लिकेशन को नए Firebase Hosting पर आधारित सिस्टम पर माइग्रेट करना चाहिए.
बंद कर दिया गया: ईमेल-पासवर्ड और ईमेल लिंक में अंतर करना
अगर आपने अपना प्रोजेक्ट 15 सितंबर, 2023 को या उसके बाद बनाया है, तो ईमेल की गिनती से जुड़ी सुरक्षा की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इस सुविधा से, आपके प्रोजेक्ट के उपयोगकर्ता खातों की सुरक्षा बेहतर होती है. हालांकि, इससे fetchSignInMethodsForEmail() तरीका बंद हो जाता है. पहले, हम पहचान करने वाले व्यक्ति की जानकारी पहले भरने के फ़्लो को लागू करने के लिए, इस तरीके का सुझाव देते थे.
आपके पास अपने प्रोजेक्ट के लिए, ईमेल पता ढूंढने से जुड़ी सुरक्षा की सुविधा बंद करने का विकल्प होता है. हालांकि, हमारा सुझाव है कि ऐसा न करें.
ज़्यादा जानने के लिए, ईमेल पते की गिनती से सुरक्षा की सुविधा चालू या बंद करना लेख पढ़ें.
अगले चरण
जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बनता है. यह खाता, उस क्रेडेंशियल से लिंक होता है जिससे उपयोगकर्ता ने साइन इन किया था. जैसे, उपयोगकर्ता का नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली कंपनी की जानकारी. यह नया खाता, आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि उपयोगकर्ता ने किस तरह से साइन इन किया है.
-
अपने ऐप्लिकेशन में,
Userऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी पाई जा सकती है. उपयोगकर्ताओं को मैनेज करना लेख पढ़ें. Firebase Realtime Database और Cloud Storage सुरक्षा नियमों में, आपको ये काम करने की सुविधा मिलती है: साइन इन किए हुए उपयोगकर्ता का यूनीक User-ID,
authवैरिएबल से पाएं, और इसका इस्तेमाल यह कंट्रोल करने के लिए करें कि कोई उपयोगकर्ता किस डेटा को ऐक्सेस कर सकता है.
उपयोगकर्ताओं को, पुष्टि करने वाली कई कंपनियों की मदद से आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. इसके लिए, पुष्टि करने वाली कंपनी के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करें.
किसी उपयोगकर्ता को साइन आउट करने के लिए,
signOut: को कॉल करें.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
आपको पुष्टि करने से जुड़ी सभी गड़बड़ियों के लिए, गड़बड़ी ठीक करने वाला कोड भी जोड़ना पड़ सकता है. गड़बड़ियां ठीक करना लेख पढ़ें.