Apple प्लैटफ़ॉर्म पर ईमेल लिंक का इस्तेमाल करके Firebase से पुष्टि करें

Firebase से पुष्टि करने की मदद से, किसी उपयोगकर्ता को ईमेल भेजकर साइन इन कराया जा सकता है. इस ईमेल में एक लिंक होता है, जिस पर क्लिक करके उपयोगकर्ता साइन इन कर सकता है. इस प्रोसेस में, उपयोगकर्ता के ईमेल पते की पुष्टि भी की जाती है.

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

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

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

Firebase की डिपेंडेंसी इंस्टॉल और मैनेज करने के लिए, Swift Package Manager का इस्तेमाल करें.

  1. Xcode में, अपने ऐप्लिकेशन प्रोजेक्ट को खोलें. इसके बाद, फ़ाइल > पैकेज जोड़ें पर जाएं.
  2. प्रॉम्प्ट मिलने पर, Firebase Apple प्लैटफ़ॉर्म SDK टूल का रिपॉज़िटरी जोड़ें:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Authentication लाइब्रेरी चुनें.
  5. अपने टारगेट की बिल्ड सेटिंग के Other Linker Flags सेक्शन में, -ObjC फ़्लैग जोड़ें.
  6. इसके बाद, Xcode अपने-आप आपकी डिपेंडेंसी से जुड़ी समस्या को हल करना शुरू कर देगा और उन्हें बैकग्राउंड में डाउनलोड करेगा.

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

  1. Firebase कंसोल में, सुरक्षा > पुष्टि पर जाएं.

  2. साइन-इन का तरीका टैब में, ईमेल/पासवर्ड साइन-इन करने की सुविधा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक की मदद से साइन इन करने के लिए, ईमेल/पासवर्ड की मदद से साइन इन करने की सुविधा चालू होनी चाहिए.

  3. इसी सेक्शन में, ईमेल लिंक (पासवर्ड के बिना साइन इन) की सुविधा देने वाली कंपनी के लिए, साइन इन करने की सुविधा चालू करें.

  4. सेव करें पर क्लिक करें.

पुष्टि करने की प्रोसेस शुरू करने के लिए, उपयोगकर्ता को एक ऐसा इंटरफ़ेस दिखाएं जिसमें उपयोगकर्ता से उसका ईमेल पता मांगा जाए. इसके बाद, Firebase से उपयोगकर्ता के ईमेल पर पुष्टि करने के लिए लिंक भेजने का अनुरोध करने के लिए, sendSignInLink को कॉल करें.

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

    • url: एम्बेड करने के लिए डीप लिंक और पास किया जाने वाला कोई भी अतिरिक्त स्टेट. अगर आपने पहले से ऐसा नहीं किया है, तो अनुमति वाले डोमेन की सूची में अपना डोमेन जोड़ें:

      1. Firebase कंसोल में, सुरक्षा > पुष्टि > सेटिंग टैब पर जाएं.

      2. अनुमति वाले डोमेन सेक्शन में, डोमेन जोड़ें पर क्लिक करें. इसके बाद, अपना डोमेन जोड़ें .

    • iOSBundleID और androidPackageName: इससे Firebase Authentication को यह तय करने में मदद मिलती है कि उसे सिर्फ़ वेब लिंक बनाना चाहिए या मोबाइल लिंक. मोबाइल लिंक को Android या Apple डिवाइस पर खोला जाता है.
    • handleCodeInApp: इसे 'सही' पर सेट करें. साइन इन करने की कार्रवाई हमेशा ऐप्लिकेशन में पूरी करनी होती है. ऐसा, ईमेल से जुड़ी अन्य कार्रवाइयों (पासवर्ड रीसेट करना और ईमेल की पुष्टि करना) के उलट है. ऐसा इसलिए, क्योंकि प्रोसेस के आखिर में, उपयोगकर्ता को साइन इन किया हुआ माना जाता है और उसकी पुष्टि की स्थिति, ऐप्लिकेशन में सेव रहती है.
    • linkDomain: जब किसी प्रोजेक्ट के लिए, कस्टम Hosting लिंक डोमेन तय किए जाते हैं, तो यह तय करें कि किसी खास मोबाइल ऐप्लिकेशन से लिंक खोले जाने पर, किस डोमेन का इस्तेमाल किया जाना चाहिए. ऐसा न करने पर, डिफ़ॉल्ट डोमेन अपने-आप चुन लिया जाता है. उदाहरण के लिए, PROJECT_ID.firebaseapp.com.
    • dynamicLinkDomain: अब सेवा में नहीं है. यह पैरामीटर तय न करें.

    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 के बारे में ज़्यादा जानने के लिए, ईमेल से जुड़ी कार्रवाइयों में स्टेट पास करना सेक्शन देखें.

  2. उपयोगकर्ता से उसका ईमेल पता मांगें.

  3. उपयोगकर्ता के ईमेल पर पुष्टि करने के लिए लिंक भेजें. साथ ही, उपयोगकर्ता का ईमेल पता सेव करें, ताकि अगर उपयोगकर्ता उसी डिवाइस पर ईमेल की मदद से साइन इन करता है, तो उसे फिर से ईमेल पता न डालना पड़े.

    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 डोमेन पहले से कॉन्फ़िगर किया गया है.

  1. Firebase Hosting डोमेन कॉन्फ़िगर करें:

    Firebase कंसोल में, होस्टिंग और सर्वरलेस > होस्टिंग पर जाएं.

    • अगर आपको मोबाइल ऐप्लिकेशन में खुलने वाले ईमेल लिंक के लिए, डिफ़ॉल्ट डोमेन का इस्तेमाल करना है, तो अपनी डिफ़ॉल्ट साइट पर जाएं और अपने डिफ़ॉल्ट Hosting डोमेन को नोट करें. एक डिफ़ॉल्ट Hosting डोमेन आम तौर पर इस तरह दिखता है: PROJECT_ID.firebaseapp.com.

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

    • अगर आपको ईमेल लिंक के लिए कोई कस्टम डोमेन इस्तेमाल करना है, तो आप एक रजिस्टर कर सकते हैं Firebase Hosting और लिंक के डोमेन के लिए उसका इस्तेमाल कर सकते हैं.

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

    आपको चुने गए डोमेन को, ऐप्लिकेशन लिंक के लिए जुड़े हुए डोमेन के तौर पर कॉन्फ़िगर करना होगा. अपने ऐप्लिकेशन में एंटाइटलमेंट सेट अप करने के लिए, Xcode में टारगेट का साइनिंग और क्षमताएं टैब खोलें. इसके बाद, पिछले चरण में बताए गए Firebase Hosting के डोमेन को, 'जुड़े हुए डोमेन' की क्षमता में जोड़ें. अगर डिफ़ॉल्ट 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 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 सुरक्षा नियमों में, आप साइन इन किए हुए उपयोगकर्ता की यूनीक उपयोगकर्ता आईडी 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;
}

पुष्टि करने से जुड़ी सभी गड़बड़ियों को मैनेज करने के लिए, आपको गड़बड़ी को मैनेज करने वाला कोड भी जोड़ना पड़ सकता है. गड़बड़ियों को मैनेज करना देखें.