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

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

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

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

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

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

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

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

  1. Firebase कंसोल में, Auth सेक्शन खोलें.
  2. साइन इन करने का तरीका टैब पर, ईमेल/पासवर्ड की सुविधा देने वाली कंपनी को चालू करें. ध्यान दें कि ईमेल लिंक से साइन इन करने की सुविधा का इस्तेमाल करने के लिए, ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू होनी चाहिए.
  3. उसी सेक्शन में, साइन इन करने का तरीका ईमेल लिंक (बिना पासवर्ड के साइन इन करें) चालू करें.
  4. सेव करें पर क्लिक करें.

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

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

    • url: एम्बेड किया जाने वाला डीप लिंक और कोई अन्य स्टेटस. लिंक किए गए डोमेन को, अनुमति वाले डोमेन की Firebase Console की सूची में श्वेत सूची में शामिल किया जाना चाहिए. यह सूची, साइन इन करने के तरीके वाले टैब (पुष्टि करना -> साइन इन करने का तरीका) पर जाकर देखी जा सकती है.
    • 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 होस्टिंग डोमेन को, असोसिएटेड डोमेन की सुविधा में जोड़ें. अगर डिफ़ॉल्ट 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 टूल के 11.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;
}

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