आप किसी उपयोगकर्ता को एक लिंक वाला ईमेल भेजकर साइन इन करने के लिए Firebase प्रमाणीकरण का उपयोग कर सकते हैं, जिस पर वे साइन इन करने के लिए क्लिक कर सकते हैं। इस प्रक्रिया में, उपयोगकर्ता का ईमेल पता भी सत्यापित किया जाता है।
ईमेल द्वारा साइन इन करने के अनेक लाभ हैं:
- कम घर्षण साइन-अप और साइन-इन।
- अनुप्रयोगों में पासवर्ड के पुन: उपयोग का कम जोखिम, जो अच्छी तरह से चुने गए पासवर्ड की सुरक्षा को भी कमजोर कर सकता है।
- उपयोगकर्ता को ईमेल पते का वैध स्वामी होने की पुष्टि करते हुए उपयोगकर्ता को प्रमाणित करने की क्षमता।
- एक उपयोगकर्ता को साइन इन करने के लिए केवल एक सुलभ ईमेल खाते की आवश्यकता होती है। किसी फ़ोन नंबर या सोशल मीडिया खाते के स्वामित्व की आवश्यकता नहीं होती है।
- एक उपयोगकर्ता पासवर्ड प्रदान करने (या याद रखने) की आवश्यकता के बिना सुरक्षित रूप से साइन इन कर सकता है, जो मोबाइल डिवाइस पर बोझिल हो सकता है।
- एक मौजूदा उपयोगकर्ता जिसने पहले एक ईमेल पहचानकर्ता (पासवर्ड या फ़ेडरेटेड) के साथ साइन इन किया था, उसे केवल ईमेल से साइन इन करने के लिए अपग्रेड किया जा सकता है। उदाहरण के लिए, एक उपयोगकर्ता जो अपना पासवर्ड भूल गया है अभी भी अपना पासवर्ड रीसेट किए बिना साइन इन कर सकता है।
शुरू करने से पहले
फायरबेस निर्भरताओं को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।
- Xcode में, अपने ऐप प्रोजेक्ट को खोलने के साथ, File > Add Packages पर नेविगेट करें।
- संकेत दिए जाने पर, Firebase Apple प्लेटफ़ॉर्म SDK रिपॉजिटरी जोड़ें:
- फायरबेस ऑथेंटिकेशन लाइब्रेरी चुनें।
- समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरताओं को हल करना और डाउनलोड करना शुरू कर देगा।
https://github.com/firebase/firebase-ios-sdk
अपने फायरबेस प्रोजेक्ट के लिए ईमेल लिंक साइन-इन सक्षम करें
उपयोगकर्ताओं को ईमेल लिंक द्वारा साइन इन करने के लिए, आपको पहले अपने फायरबेस प्रोजेक्ट के लिए ईमेल प्रदाता और ईमेल लिंक साइन-इन विधि को सक्षम करना होगा:
- Firebase कंसोल में, प्रामाणिक अनुभाग खोलें।
- साइन इन विधि टैब पर, ईमेल/पासवर्ड प्रदाता को सक्षम करें। ध्यान दें कि ईमेल लिंक साइन-इन का उपयोग करने के लिए ईमेल/पासवर्ड साइन-इन सक्षम होना चाहिए।
- उसी अनुभाग में, ईमेल लिंक (पासवर्ड रहित साइन-इन) साइन-इन विधि को सक्षम करें।
- सहेजें पर क्लिक करें।
उपयोगकर्ता के ईमेल पते पर प्रमाणीकरण लिंक भेजें
प्रमाणीकरण प्रवाह आरंभ करने के लिए, उपयोगकर्ता को एक इंटरफ़ेस के साथ प्रस्तुत करें जो उपयोगकर्ता को अपना ईमेल पता प्रदान करने के लिए संकेत देता है और फिर Firebase उपयोगकर्ता के ईमेल पर प्रमाणीकरण लिंक भेजने का अनुरोध करने के लिए sendSignInLink
को कॉल करता है।
ActionCodeSettings
ऑब्जेक्ट का निर्माण करें, जो Firebase को निर्देश देता है कि ईमेल लिंक कैसे बनाया जाए। निम्नलिखित फ़ील्ड सेट करें:- url: एम्बेड करने के लिए डीप लिंक और पास की जाने वाली कोई भी अतिरिक्त अवस्था। लिंक के डोमेन को अधिकृत डोमेन की फायरबेस कंसोल सूची में श्वेतसूचीबद्ध करना होगा, जिसे साइन-इन विधि टैब (प्रमाणीकरण -> साइन-इन विधि) पर जाकर पाया जा सकता है।
- iOSBundleID और androidPackageName : किसी Android या Apple डिवाइस पर साइन-इन लिंक खोले जाने पर उपयोग किए जाने वाले ऐप्स। मोबाइल एप्लिकेशन के माध्यम से ईमेल कार्रवाई लिंक खोलने के लिए फायरबेस डायनेमिक लिंक को कॉन्फ़िगर करने के तरीके के बारे में और जानें।
- हैंडलकोडइनएप: सत्य पर सेट करें। अन्य आउट ऑफ बैंड ईमेल क्रियाओं (पासवर्ड रीसेट और ईमेल सत्यापन) के विपरीत साइन-इन ऑपरेशन को हमेशा ऐप में पूरा करना होता है। ऐसा इसलिए है, क्योंकि प्रवाह के अंत में, उपयोगकर्ता के साइन इन होने की उम्मीद की जाती है और ऐप के भीतर उनकी प्रामाणिक स्थिति बनी रहती है।
- डायनेमिकलिंकडोमेन: जब एक प्रोजेक्ट के लिए कई कस्टम डायनेमिक लिंक डोमेन परिभाषित किए जाते हैं, तो निर्दिष्ट करें कि किसी निर्दिष्ट मोबाइल ऐप के माध्यम से लिंक खोले जाने पर किसका उपयोग करना है (उदाहरण के लिए,
example.page.link
)। अन्यथा पहला डोमेन स्वचालित रूप से चुना जाता है।
तीव्र
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")
उद्देश्य सी
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 के बारे में अधिक जानने के लिए, ईमेल क्रिया अनुभाग में पासिंग स्टेट देखें।
उपयोगकर्ता से उनके ईमेल के लिए पूछें।
उपयोगकर्ता के ईमेल पर प्रमाणीकरण लिंक भेजें, और यदि उपयोगकर्ता उसी डिवाइस पर ईमेल साइन-इन पूरा करता है तो उपयोगकर्ता के ईमेल को सहेजें।
तीव्र
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") // ... }
उद्देश्य सी
[[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"]; // ... }];
ईमेल लिंक के साथ पूर्ण साइन इन करें
सुरक्षा चिंताएं
साइन-इन लिंक को एक अनपेक्षित उपयोगकर्ता के रूप में या किसी अनपेक्षित डिवाइस पर साइन-इन करने के लिए उपयोग किए जाने से रोकने के लिए, साइन-इन प्रवाह को पूरा करते समय फायरबेस ऑथ को उपयोगकर्ता का ईमेल पता प्रदान करने की आवश्यकता होती है। साइन-इन सफल होने के लिए, यह ईमेल पता उस पते से मेल खाना चाहिए जिस पर साइन-इन लिंक मूल रूप से भेजा गया था।
जब आप साइन-इन ईमेल भेजते हैं तो आप अपने ईमेल पते को स्थानीय रूप से संग्रहीत करके उसी डिवाइस पर साइन-इन लिंक खोलने वाले उपयोगकर्ताओं के लिए इस प्रवाह को सुव्यवस्थित कर सकते हैं, जिससे वे लिंक का अनुरोध करते हैं। फिर, प्रवाह को पूरा करने के लिए इस पते का उपयोग करें।
साइन-इन पूर्ण होने के बाद, साइन-इन के किसी भी पिछले असत्यापित तंत्र को उपयोगकर्ता से हटा दिया जाएगा और कोई भी मौजूदा सत्र अमान्य कर दिया जाएगा। उदाहरण के लिए, यदि किसी ने पहले उसी ईमेल और पासवर्ड के साथ एक असत्यापित खाता बनाया है, तो उपयोगकर्ता का पासवर्ड हटा दिया जाएगा ताकि उस प्रतिरूपणकर्ता को रोका जा सके जिसने स्वामित्व का दावा किया और उस असत्यापित खाते को उसी खाते से फिर से साइन इन करने से रोका।
किसी Apple मोबाइल ऐप में साइन-इन पूरा करना
फायरबेस ऑथेंटिकेशन मोबाइल डिवाइस पर ईमेल लिंक भेजने के लिए फायरबेस डायनेमिक लिंक का उपयोग करता है। मोबाइल एप्लिकेशन के माध्यम से साइन-इन पूरा करने के लिए, आने वाले एप्लिकेशन लिंक का पता लगाने के लिए एप्लिकेशन को कॉन्फ़िगर करना होगा, अंतर्निहित डीप लिंक को पार्स करना होगा और फिर साइन-इन को पूरा करना होगा।
फायरबेस डायनेमिक लिंक को कॉन्फ़िगर करना
फायरबेस ऑथ मोबाइल एप्लिकेशन में खोले जाने वाले लिंक को भेजते समय फायरबेस डायनेमिक लिंक का उपयोग करता है। इस सुविधा का उपयोग करने के लिए, डायनेमिक लिंक को फायरबेस कंसोल में कॉन्फ़िगर करने की आवश्यकता है।
फायरबेस डायनेमिक लिंक सक्षम करें:
- Firebase कंसोल में, डायनामिक लिंक अनुभाग खोलें।
यदि आपने अभी तक डायनामिक लिंक शर्तों को स्वीकार नहीं किया है और डायनामिक लिंक्स डोमेन बनाया है, तो अभी ऐसा करें।
यदि आपने पहले ही डायनेमिक लिंक्स डोमेन बना लिया है, तो इस पर ध्यान दें। एक डायनेमिक लिंक डोमेन आमतौर पर निम्न उदाहरण जैसा दिखता है:
example.page.link
जब आप इनकमिंग लिंक को इंटरसेप्ट करने के लिए अपने Apple या Android ऐप को कॉन्फ़िगर करते हैं तो आपको इस मान की आवश्यकता होगी।
Apple अनुप्रयोगों को कॉन्फ़िगर करना:
- यदि आप अपने ऐप्लिकेशन से इन लिंक को प्रबंधित करने की योजना बना रहे हैं, तो बंडल आईडी को Firebase कंसोल प्रोजेक्ट सेटिंग में निर्दिष्ट करने की आवश्यकता है। इसके अलावा, ऐप स्टोर आईडी और ऐप्पल डेवलपर टीम आईडी भी निर्दिष्ट करने की आवश्यकता है।
- आपको अपनी एप्लिकेशन क्षमताओं में एक संबद्ध डोमेन के रूप में अपने ईमेल एक्शन हैंडलर डोमेन को कॉन्फ़िगर करने की भी आवश्यकता होगी। डिफ़ॉल्ट रूप से, ईमेल एक्शन हैंडलर को निम्नलिखित उदाहरण की तरह एक डोमेन पर होस्ट किया जाता है:
APP_ID.firebaseapp.com
- यदि आप अपने एप्लिकेशन को iOS संस्करण 8 और उससे कम में वितरित करने की योजना बना रहे हैं, तो आपको आने वाले URL के लिए अपनी बंडल आईडी को एक कस्टम योजना के रूप में सेट करना होगा।
- इस बारे में अधिक जानकारी के लिए, Apple प्लेटफ़ॉर्म डायनेमिक लिंक निर्देश प्राप्त करना देखें।
लिंक सत्यापित करें और साइन इन करें
ऊपर बताए अनुसार लिंक प्राप्त करने के बाद, सत्यापित करें कि यह ईमेल लिंक प्रमाणीकरण के लिए है और साइन इन पूरा करें।
तीव्र
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
उद्देश्य सी
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
एंड्रॉइड एप्लिकेशन में ईमेल लिंक के साथ साइन-इन को संभालने के तरीके के बारे में जानने के लिए, एंड्रॉइड गाइड देखें।
वेब एप्लिकेशन में ईमेल लिंक के साथ साइन-इन को हैंडल करने के तरीके के बारे में जानने के लिए, वेब गाइड देखें।
ईमेल लिंक के साथ लिंकिंग/पुन: प्रमाणीकरण
आप प्रमाणीकरण के इस तरीके को किसी मौजूदा उपयोगकर्ता से भी जोड़ सकते हैं। उदाहरण के लिए, पहले से किसी अन्य प्रदाता के साथ प्रमाणित उपयोगकर्ता, जैसे फ़ोन नंबर, साइन-इन की इस विधि को अपने मौजूदा खाते में जोड़ सकता है।
अंतर ऑपरेशन के दूसरे भाग में होगा:
तीव्र
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. }
उद्देश्य सी
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. }];
संवेदनशील ऑपरेशन चलाने से पहले इसका उपयोग ईमेल लिंक उपयोगकर्ता को फिर से प्रमाणित करने के लिए भी किया जा सकता है।
तीव्र
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. }
उद्देश्य सी
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. }];
हालांकि, चूंकि प्रवाह एक अलग डिवाइस पर समाप्त हो सकता है जहां मूल उपयोगकर्ता लॉग इन नहीं था, इसलिए यह प्रवाह पूरा नहीं हो सकता है। उस स्थिति में, उपयोगकर्ता को उसी डिवाइस पर लिंक खोलने के लिए बाध्य करने के लिए एक त्रुटि दिखाई जा सकती है। कुछ राज्य संचालन के प्रकार और उपयोगकर्ता यूआईडी के बारे में जानकारी प्रदान करने के लिए लिंक में पारित किया जा सकता है।
ईमेल/पासवर्ड को ईमेल लिंक से अलग करना
यदि आप ईमेल के साथ पासवर्ड और लिंक-आधारित साइन-इन दोनों का समर्थन करते हैं, तो पासवर्ड/लिंक उपयोगकर्ता के लिए साइन-इन की विधि को अलग करने के लिए, fetchSignInMethodsForEmail
का उपयोग करें। यह पहचानकर्ता-पहले प्रवाह के लिए उपयोगी है जहां उपयोगकर्ता को पहले अपना ईमेल प्रदान करने के लिए कहा जाता है और फिर साइन-इन की विधि प्रस्तुत की जाती है:
तीव्र
// After asking the user for their email. Auth.auth().fetchSignInMethods(forEmail: email) { signInMethods, error in // This returns the same array as fetchProviders(forEmail:completion:) but for email // provider identified by 'password' string, signInMethods would contain 2 // different strings: // 'emailLink' if the user previously signed in with an email/link // 'password' if the user has a password. // A user could have both. if (error) { // Handle error case. } if (!signInMethods.contains(EmailPasswordAuthSignInMethod)) { // User can sign in with email/password. } if (!signInMethods.contains(EmailLinkAuthSignInMethod)) { // User can sign in with email/link. } }
उद्देश्य सी
// After asking the user for their email. [FIRAuth auth] fetchSignInMethodsForEmail:email completion:^(NSArray*_Nullable signInMethods, NSError *_Nullable error) { // This returns the same array as fetchProvidersForEmail but for email // provider identified by 'password' string, signInMethods would contain 2 // different strings: // 'emailLink' if the user previously signed in with an email/link // 'password' if the user has a password. // A user could have both. if (error) { // Handle error case. } if (![signInMethods containsObject:FIREmailPasswordAuthSignInMethod]) { // User can sign in with email/password. } if (![signInMethods containsObject:FIREmailLinkAuthSignInMethod]) { // User can sign in with email/link. } }];
जैसा ऊपर बताया गया है ईमेल/पासवर्ड और ईमेल/लिंक को साइन-इन के विभिन्न तरीकों के साथ एक ही EmailAuthProvider
(समान PROVIDER_ID
) माना जाता है।
अगले कदम
उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल्स से लिंक किया जाता है—यानी, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिसके साथ उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और उपयोगकर्ता द्वारा साइन इन किए जाने पर ध्यान दिए बिना, आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए इसका उपयोग किया जा सकता है।
अपने ऐप्लिकेशन में, आप
User
ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।आपके फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप
auth
चर से साइन-इन किए गए उपयोगकर्ता की विशिष्ट उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।
किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut:
.
तीव्र
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
उद्देश्य सी
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
आप प्रमाणीकरण त्रुटियों की पूरी श्रृंखला के लिए त्रुटि प्रबंधन कोड भी जोड़ना चाह सकते हैं। हैंडल एरर देखें।