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

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

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

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

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

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

  1. Xcode में, अपने ऐप्लिकेशन प्रोजेक्ट को खोलें. इसके बाद, File > Add Packages पर जाएं.
  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 कंसोल में, Auth सेक्शन खोलें.
  2. साइन इन करने का तरीका टैब पर, ईमेल/पासवर्ड की सुविधा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक से साइन इन करने की सुविधा का इस्तेमाल करने के लिए, ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू होनी चाहिए.
  3. उसी सेक्शन में, ईमेल लिंक (बिना पासवर्ड के साइन-इन करना) साइन-इन करने का तरीका चालू करें.
  4. सेव करें पर क्लिक करें.

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

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

    • url: एम्बेड करने के लिए डीप लिंक और पास करने के लिए कोई भी अतिरिक्त स्थिति. लिंक के डोमेन को, Firebase कंसोल में अनुमति वाले डोमेन की सूची में शामिल करना होगा. यह सूची, साइन-इन करने का तरीका टैब (Authentication -> साइन-इन करने का तरीका) में जाकर देखी जा सकती है.
    • 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 में टारगेट का Signing & Capabilities टैब खोलें. इसके बाद, पिछले चरण में बताए गए Firebase Hosting डोमेन को Associated Domains capability में जोड़ें. अगर डिफ़ॉल्ट 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 वैरिएबल से साइन इन किए हुए उपयोगकर्ता का यूनीक User-ID पाया जा सकता है. साथ ही, इसका इस्तेमाल यह कंट्रोल करने के लिए किया जा सकता है कि कोई उपयोगकर्ता किस डेटा को ऐक्सेस कर सकता है.

उपयोगकर्ताओं को पुष्टि करने वाले कई प्रोवाइडर का इस्तेमाल करके, आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. इसके लिए, पुष्टि करने वाले प्रोवाइडर के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करें.

किसी उपयोगकर्ता को साइन आउट करने के लिए, 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;
}

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