Apple প্ল্যাটফর্মে ইমেল লিঙ্ক ব্যবহার করে Firebase দিয়ে প্রমাণীকরণ করুন

আপনি Firebase Authentication ব্যবহার করে একজন ব্যবহারকারীকে একটি লিঙ্ক সম্বলিত ইমেল পাঠিয়ে সাইন ইন করতে পারেন, যেটিতে ক্লিক করে তারা সাইন ইন করতে পারবেন। এই প্রক্রিয়ায়, ব্যবহারকারীর ইমেল ঠিকানাও যাচাই করা হয়।

ইমেলের মাধ্যমে সাইন ইন করার অনেক সুবিধা রয়েছে:

  • কম ঘর্ষণ সাইন-আপ এবং সাইন-ইন।
  • অ্যাপ্লিকেশন জুড়ে পাসওয়ার্ড পুনঃব্যবহারের ঝুঁকি কম, যা এমনকি সঠিকভাবে নির্বাচিত পাসওয়ার্ডের নিরাপত্তাও নষ্ট করতে পারে।
  • একজন ব্যবহারকারীকে প্রমাণীকরণ করার ক্ষমতা এবং সেই সাথে যাচাই করার ক্ষমতা যে ব্যবহারকারীই একটি ইমেল ঠিকানার বৈধ মালিক।
  • সাইন ইন করার জন্য একজন ব্যবহারকারীর শুধুমাত্র একটি অ্যাক্সেসযোগ্য ইমেল অ্যাকাউন্ট প্রয়োজন। ফোন নম্বর বা সোশ্যাল মিডিয়া অ্যাকাউন্টের মালিকানা প্রয়োজন হয় না।
  • একজন ব্যবহারকারী পাসওয়ার্ড প্রদান (বা মনে রাখার) প্রয়োজন ছাড়াই নিরাপদে সাইন ইন করতে পারেন, যা মোবাইল ডিভাইসে কষ্টকর হতে পারে।
  • একজন বিদ্যমান ব্যবহারকারী যিনি পূর্বে একটি ইমেল শনাক্তকারী (পাসওয়ার্ড বা ফেডারেটেড) দিয়ে সাইন ইন করেছেন, তাকে কেবল ইমেল দিয়ে সাইন ইন করতে আপগ্রেড করা যেতে পারে। উদাহরণস্বরূপ, একজন ব্যবহারকারী যিনি তাদের পাসওয়ার্ড ভুলে গেছেন তিনি এখনও তাদের পাসওয়ার্ড রিসেট না করেই সাইন ইন করতে পারেন।

শুরু করার আগে

ফায়ারবেস নির্ভরতা ইনস্টল এবং পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।

  1. Xcode-এ, আপনার অ্যাপ প্রজেক্ট খোলা থাকা অবস্থায়, File > Add Packages- এ নেভিগেট করুন।
  2. অনুরোধ করা হলে, Firebase Apple platforms 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 : সত্য হিসেবে সেট করা হয়েছে। অন্যান্য আউট অফ ব্যান্ড ইমেল অ্যাকশন (পাসওয়ার্ড রিসেট এবং ইমেল যাচাইকরণ) এর বিপরীতে সাইন-ইন অপারেশনটি সর্বদা অ্যাপেই সম্পন্ন করতে হবে। এর কারণ হল, ফ্লো শেষে, ব্যবহারকারী সাইন ইন থাকবেন এবং অ্যাপের মধ্যেই তাদের Auth অবস্থা বজায় থাকবে বলে আশা করা হচ্ছে।
    • linkDomain : যখন কোনও প্রকল্পের জন্য কাস্টম Hosting লিঙ্ক ডোমেনগুলি সংজ্ঞায়িত করা হয়, তখন নির্দিষ্ট মোবাইল অ্যাপ দ্বারা লিঙ্কটি খোলার সময় কোনটি ব্যবহার করবেন তা নির্দিষ্ট করুন। অন্যথায় ডিফল্ট ডোমেনটি স্বয়ংক্রিয়ভাবে নির্বাচিত হয় (উদাহরণস্বরূপ, PROJECT_ID .firebaseapp.com )।
    • dynamicLinkDomain : অবচিত। এই প্যারামিটারটি নির্দিষ্ট করবেন না।

    সুইফট

    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")

    অবজেক্টিভ-সি

    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. ব্যবহারকারীর ইমেলে প্রমাণীকরণ লিঙ্কটি পাঠান, এবং ব্যবহারকারী একই ডিভাইসে ইমেল সাইন-ইন সম্পন্ন করলে ব্যবহারকারীর ইমেলটি সংরক্ষণ করুন।

    সুইফট

    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")
        // ...
    }

    অবজেক্টিভ-সি

    [[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-এর জন্য সাইন-ইন প্রক্রিয়া সম্পন্ন করার সময় ব্যবহারকারীর ইমেল ঠিকানা প্রদান করা প্রয়োজন। সাইন-ইন সফল হওয়ার জন্য, এই ইমেল ঠিকানাটি অবশ্যই সাইন-ইন লিঙ্কটি মূলত যে ঠিকানায় পাঠানো হয়েছিল তার সাথে মিলতে হবে।

আপনি সাইন-ইন ইমেল পাঠানোর সময় স্থানীয়ভাবে তাদের ইমেল ঠিকানা সংরক্ষণ করে, লিঙ্কটি অনুরোধ করা ডিভাইসে সাইন-ইন লিঙ্কটি খোলেন এমন ব্যবহারকারীদের জন্য এই প্রবাহটি স্ট্রিমলাইন করতে পারেন। তারপর, প্রবাহটি সম্পূর্ণ করতে এই ঠিকানাটি ব্যবহার করুন।

সাইন-ইন সম্পন্ন হওয়ার পর, ব্যবহারকারীর কাছ থেকে পূর্ববর্তী যাচাই না করা সাইন-ইন প্রক্রিয়াটি সরিয়ে ফেলা হবে এবং বিদ্যমান যেকোনো সেশন বাতিল করা হবে। উদাহরণস্বরূপ, যদি কেউ পূর্বে একই ইমেল এবং পাসওয়ার্ড দিয়ে একটি যাচাই না করা অ্যাকাউন্ট তৈরি করে থাকে, তাহলে ব্যবহারকারীর পাসওয়ার্ডটি সরিয়ে ফেলা হবে যাতে মালিকানা দাবি করে এবং যাচাই না করা অ্যাকাউন্ট তৈরি করে এমন ছদ্মবেশী ব্যক্তি একই অ্যাকাউন্ট দিয়ে আবার সাইন ইন করতে না পারে।

একটি অ্যাপল মোবাইল অ্যাপে সাইন-ইন সম্পূর্ণ করা

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. অ্যাপল অ্যাপ্লিকেশন কনফিগার করা:

    অ্যাপ লিঙ্কের জন্য আপনাকে নির্বাচিত ডোমেনটিকে একটি অ্যাসোসিয়েটেড ডোমেন হিসেবে কনফিগার করতে হবে। আপনার অ্যাপে এনটাইটেলমেন্ট সেট আপ করতে, Xcode-এ টার্গেটের সাইনিং এবং ক্যাপাবিলিটিস ট্যাবটি খুলুন এবং পূর্ববর্তী ধাপ থেকে অ্যাসোসিয়েটেড ডোমেনস ক্যাপাবিলিটিতে ফায়ারবেস হোস্টিং ডোমেন যুক্ত করুন। যদি ডিফল্ট Firebase Hosting ডোমেন ব্যবহার করেন, তাহলে এটি হবে applinks: PROJECT_ID .firebaseapp.com .

    আরও তথ্যের জন্য অ্যাপলের ডকুমেন্টেশন সাইটে সাপোর্টিং অ্যাসোসিয়েটেড ডোমেন দেখুন।

উপরে বর্ণিত লিঙ্কটি পাওয়ার পর, যাচাই করুন যে এটি ইমেল লিঙ্ক প্রমাণীকরণের জন্য তৈরি এবং সাইন ইন সম্পূর্ণ করুন।

সুইফট

if Auth.auth().isSignIn(withEmailLink: link) {
        Auth.auth().signIn(withEmail: email, link: self.link) { user, error in
          // ...
        }
}

অবজেক্টিভ-সি

if ([[FIRAuth auth] isSignInWithEmailLink:link]) {
    [[FIRAuth auth] signInWithEmail:email
                               link:link
                         completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
      // ...
    }];
}

অ্যান্ড্রয়েড অ্যাপ্লিকেশনে ইমেল লিঙ্কের মাধ্যমে সাইন-ইন কীভাবে পরিচালনা করবেন তা জানতে, অ্যান্ড্রয়েড নির্দেশিকাটি পড়ুন।

ওয়েব অ্যাপ্লিকেশনে ইমেল লিঙ্কের মাধ্যমে সাইন-ইন কীভাবে পরিচালনা করবেন তা জানতে, ওয়েব নির্দেশিকাটি দেখুন।

আপনি এই প্রমাণীকরণ পদ্ধতিটি একজন বিদ্যমান ব্যবহারকারীর সাথেও লিঙ্ক করতে পারেন। উদাহরণস্বরূপ, একজন ব্যবহারকারী যিনি পূর্বে অন্য কোনও প্রদানকারীর সাথে প্রমাণীকরণ করেছেন, যেমন একটি ফোন নম্বর, তিনি তাদের বিদ্যমান অ্যাকাউন্টে সাইন-ইন করার এই পদ্ধতিটি যোগ করতে পারেন।

অপারেশনের দ্বিতীয়ার্ধে পার্থক্যটি হবে:

সুইফট

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

অবজেক্টিভ-সি

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

এটি কোনও সংবেদনশীল অপারেশন চালানোর আগে কোনও ইমেল লিঙ্ক ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করতেও ব্যবহার করা যেতে পারে।

সুইফট

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

অবজেক্টিভ-সি

  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 ভিত্তিক সিস্টেমে স্থানান্তর করা উচিত।

যদি আপনি ১৫ সেপ্টেম্বর, ২০২৩ তারিখে বা তার পরে আপনার প্রকল্প তৈরি করে থাকেন, তাহলে ইমেল গণনা সুরক্ষা ডিফল্টরূপে সক্রিয় থাকে। এই বৈশিষ্ট্যটি আপনার প্রকল্পের ব্যবহারকারী অ্যাকাউন্টগুলির নিরাপত্তা উন্নত করে, কিন্তু এটি fetchSignInMethodsForEmail() পদ্ধতিটি অক্ষম করে, যা আমরা পূর্বে identifier-first flows বাস্তবায়নের জন্য সুপারিশ করেছিলাম।

যদিও আপনি আপনার প্রকল্পের জন্য ইমেল গণনা সুরক্ষা অক্ষম করতে পারেন, আমরা তা না করার পরামর্শ দিচ্ছি।

আরও জানতে, ইমেল গণনা সুরক্ষা সক্ষম বা অক্ষম করুন দেখুন।

পরবর্তী পদক্ষেপ

একজন ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি করা হয় এবং শংসাপত্রের সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর, অথবা প্রমাণীকরণ প্রদানকারীর তথ্য—যার মাধ্যমে ব্যবহারকারী সাইন ইন করেছেন। এই নতুন অ্যাকাউন্টটি আপনার Firebase প্রকল্পের অংশ হিসাবে সংরক্ষণ করা হয় এবং ব্যবহারকারী যেভাবেই সাইন ইন করুক না কেন, আপনার প্রকল্পের প্রতিটি অ্যাপে একজন ব্যবহারকারীকে সনাক্ত করতে ব্যবহার করা যেতে পারে।

  • আপনার অ্যাপগুলিতে, আপনি User অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা করুন দেখুন।

  • আপনার Firebase Realtime Database এবং Cloud Storage সিকিউরিটি রুলস -এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

আপনি ব্যবহারকারীদের একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন , একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করে।

কোনও ব্যবহারকারীকে সাইন আউট করতে, signOut: এ কল করুন।

সুইফট

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

অবজেক্টিভ-সি

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

আপনি সম্পূর্ণ পরিসরের প্রমাণীকরণ ত্রুটির জন্য ত্রুটি পরিচালনা কোড যোগ করতে চাইতে পারেন। Handle Errors দেখুন।