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

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

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

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

वेब कंटेनर इंस्टॉल करने से पहले

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

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

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

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

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

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

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

    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 ऑथराइज़ेशन को साइन-इन फ़्लो पूरा करते समय उपयोगकर्ता का ईमेल पता देना ज़रूरी है. साइन-इन की प्रोसेस पूरी करने के लिए, यह ईमेल पता उस पते से मेल खाना चाहिए जिस पर साइन-इन लिंक भेजा गया था.

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

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

Apple के मोबाइल ऐप्लिकेशन में साइन इन करना

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

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

  1. Firebase डाइनैमिक लिंक चालू करें:

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

      अगर आपने पहले ही डाइनैमिक लिंक डोमेन बना लिया है, तो उस पर ध्यान दें. आम तौर पर, डाइनैमिक लिंक डोमेन का उदाहरण नीचे दिया गया है:

      example.page.link

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

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

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

हालांकि, ऐसा हो सकता है कि फ़्लो किसी ऐसे डिवाइस पर खत्म हो जाए जिस पर ओरिजनल उपयोगकर्ता ने लॉग इन न किया हो. इस वजह से, हो सकता है कि यह फ़्लो पूरा न हो. ऐसे में, उपयोगकर्ता को एक गड़बड़ी दिखाई जा सकती है, ताकि उसे उसी डिवाइस पर लिंक खोलने के लिए मजबूर किया जा सके. कुछ स्टेट को लिंक में पास किया जा सकता है, ताकि कार्रवाई के टाइप और उपयोगकर्ता के uid के बारे में जानकारी दी जा सके.

अगर आपने अपना प्रोजेक्ट 15 सितंबर, 2023 या उसके बाद बनाया है, तो ईमेल इन्यूमरेशन सुरक्षा डिफ़ॉल्ट रूप से चालू रहती है. यह सुविधा आपके प्रोजेक्ट के उपयोगकर्ता खातों की सुरक्षा को बेहतर बनाती है. हालांकि, यह सुविधा fetchSignInMethodsForEmail() वाले तरीके को बंद कर देती है. हमने आइडेंटिफ़ायर के लिए पहले फ़्लो को लागू करने का सुझाव दिया था.

हालांकि, अपने प्रोजेक्ट के लिए ईमेल गिनती सुरक्षा को बंद किया जा सकता है, लेकिन हमारा सुझाव है कि ऐसा न करें.

ज़्यादा जानकारी के लिए, ईमेल एन्यूमरेशन प्रोटेक्शन वाला दस्तावेज़ देखें.

अगले चरण

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

  • अपने ऐप्लिकेशन में, User ऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी ली जा सकती है. उपयोगकर्ताओं को मैनेज करना देखें.

  • अपने Firebase रीयल टाइम डेटाबेस और 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;
}

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