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. सेव करें पर क्लिक करें.

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

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

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