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

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

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

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

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

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

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

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

  1. ActionCodeSettings ऑब्जेक्ट बनाएं, जो Firebase को . नीचे दिए गए फ़ील्ड सेट करें:

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

      अगर आपने पहले ही Dynamic Links डोमेन बना लिया है, तो उसे नोट करें. Dynamic Links डोमेन आम तौर पर नीचे दिए गए उदाहरण जैसा दिखता है:

      example.page.link

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

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

    1. अगर आपको अपने ऐप्लिकेशन से इन लिंक को मैनेज करना है, तो Firebase कंसोल में बंडल आईडी तय करना ज़रूरी है प्रोजेक्ट सेटिंग. साथ ही, App Store का आईडी और Apple Developer, टीम आईडी को भी बताना ज़रूरी है.
    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 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;
}

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