Apple प्लेटफ़ॉर्म पर ईमेल लिंक का उपयोग करके Firebase से प्रमाणित करें

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

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

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

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

फायरबेस निर्भरता को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।

  1. Xcode में, आपका ऐप प्रोजेक्ट खुला होने के साथ, File > Add Packages पर नेविगेट करें।
  2. संकेत मिलने पर, Firebase Apple प्लेटफॉर्म्स SDK रिपॉजिटरी जोड़ें:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. फायरबेस प्रमाणीकरण पुस्तकालय चुनें।
  5. समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरता को हल करना और डाउनलोड करना शुरू कर देगा।

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

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

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

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

    • 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 के बारे में अधिक जानने के लिए, ईमेल क्रियाएँ अनुभाग में पासिंग स्टेट देखें।

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

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

    तीव्र

    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 मोबाइल ऐप में साइन-इन पूरा करना

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

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

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

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

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

      example.page.link

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

  2. Apple अनुप्रयोगों को कॉन्फ़िगर करना:

    1. अगर आप अपने आवेदन से इन लिंक को संभालने की योजना बना रहे हैं, तो बंडल आईडी को Firebase कंसोल प्रोजेक्ट सेटिंग में निर्दिष्ट करना होगा। इसके अलावा, ऐप स्टोर आईडी और ऐप्पल डेवलपर टीम आईडी को भी निर्दिष्ट करने की आवश्यकता है।
    2. आपको अपनी एप्लिकेशन क्षमताओं में अपने ईमेल एक्शन हैंडलर डोमेन को एक संबद्ध डोमेन के रूप में कॉन्फ़िगर करने की भी आवश्यकता होगी। डिफ़ॉल्ट रूप से, ईमेल एक्शन हैंडलर को निम्न उदाहरण जैसे डोमेन पर होस्ट किया जाता है:
      APP_ID.firebaseapp.com
    3. यदि आप अपने एप्लिकेशन को iOS संस्करण 8 और इसके तहत वितरित करने की योजना बना रहे हैं, तो आपको आने वाले URL के लिए अपनी बंडल आईडी को एक कस्टम योजना के रूप में सेट करने की आवश्यकता होगी।
    4. इसके बारे में अधिक जानकारी के लिए, 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) {
      // ...
    }];
}

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

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

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

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

तीव्र

  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.
   }
 }];

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

अगले कदम

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

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

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप 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;
}

आप प्रमाणीकरण त्रुटियों की पूरी श्रृंखला के लिए त्रुटि प्रबंधन कोड भी जोड़ना चाह सकते हैं। हैंडल एरर देखें।