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

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

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

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

আপনি শুরু করার আগে

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

  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. Save এ ক্লিক করুন।

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

  1. ActionCodeSettings অবজেক্ট তৈরি করুন, যা Firebase-কে ইমেল লিঙ্ক কীভাবে তৈরি করতে হয় তার নির্দেশাবলী প্রদান করে। নিম্নলিখিত ক্ষেত্র সেট করুন:

    • url: এম্বেড করার গভীর লিঙ্ক এবং যেকোন অতিরিক্ত অবস্থা পাস করতে হবে। লিঙ্কের ডোমেনটিকে অনুমোদিত ডোমেনের Firebase কনসোলের তালিকায় সাদা তালিকাভুক্ত করতে হবে, যা সাইন-ইন পদ্ধতি ট্যাবে গিয়ে (প্রমাণিকরণ -> সাইন-ইন পদ্ধতি) পাওয়া যাবে।
    • iOSBundleID এবং androidPackageName : যখন একটি Android বা Apple ডিভাইসে সাইন-ইন লিঙ্ক খোলা হয় তখন যে অ্যাপগুলি ব্যবহার করতে হবে৷ মোবাইল অ্যাপের মাধ্যমে ইমেল অ্যাকশন লিঙ্কগুলি খুলতে Firebase ডায়নামিক লিঙ্কগুলি কীভাবে কনফিগার করবেন সে সম্পর্কে আরও জানুন।
    • handleCodeInApp: সত্যে সেট করুন। সাইন-ইন অপারেশনটি সর্বদা অ্যাপে সম্পূর্ণ করতে হবে অন্যান্য ব্যান্ড ইমেল অ্যাকশনের বিপরীতে (পাসওয়ার্ড রিসেট এবং ইমেল যাচাইকরণ)। এর কারণ হল, প্রবাহের শেষে, ব্যবহারকারী সাইন ইন করবেন বলে আশা করা হচ্ছে এবং অ্যাপের মধ্যে তাদের প্রমাণীকরণ স্থিতি বজায় থাকবে।
    • dynamicLinkDomain: যখন একটি প্রকল্পের জন্য একাধিক কাস্টম ডায়নামিক লিঙ্ক ডোমেন সংজ্ঞায়িত করা হয়, নির্দিষ্ট মোবাইল অ্যাপের মাধ্যমে লিঙ্কটি খোলার সময় কোনটি ব্যবহার করতে হবে তা নির্দিষ্ট করুন (উদাহরণস্বরূপ, example.page.link )। অন্যথায় প্রথম ডোমেইন স্বয়ংক্রিয়ভাবে নির্বাচিত হয়।

    সুইফট

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

    উদ্দেশ্য-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 সম্পর্কে আরো জানতে, Email Actions বিভাগে পাসিং স্টেট পড়ুন।

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

    উদ্দেশ্য-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 প্রমাণীকরণ একটি মোবাইল ডিভাইসে ইমেল লিঙ্ক পাঠাতে Firebase ডায়নামিক লিঙ্ক ব্যবহার করে। মোবাইল অ্যাপ্লিকেশনের মাধ্যমে সাইন-ইন সম্পূর্ণ করার জন্য, আগত অ্যাপ্লিকেশন লিঙ্কটি সনাক্ত করতে, অন্তর্নিহিত গভীর লিঙ্কটি পার্স করতে এবং তারপর সাইন-ইন সম্পূর্ণ করতে অ্যাপ্লিকেশনটিকে কনফিগার করতে হবে।

Firebase Auth ফায়ারবেস ডায়নামিক লিঙ্কগুলি ব্যবহার করে একটি লিঙ্ক পাঠানোর সময় যা একটি মোবাইল অ্যাপ্লিকেশনে খোলার জন্য। এই বৈশিষ্ট্যটি ব্যবহার করার জন্য, ডায়নামিক লিঙ্কগুলিকে Firebase কনসোলে কনফিগার করতে হবে৷

  1. ফায়ারবেস ডায়নামিক লিঙ্কগুলি সক্ষম করুন:

    1. Firebase কনসোলে , Dynamic Links বিভাগ খুলুন।
    2. আপনি যদি এখনও Dynamic Links শর্তাদি গ্রহণ না করে থাকেন এবং একটি Dynamic Links ডোমেন তৈরি না করে থাকেন, তাহলে এখনই করুন৷

      আপনি যদি ইতিমধ্যেই একটি Dynamic Links ডোমেন তৈরি করে থাকেন, তবে এটি নোট করুন। একটি Dynamic Links ডোমেন সাধারণত নিম্নলিখিত উদাহরণের মত দেখায়:

      example.page.link

      ইনকামিং লিঙ্কটি আটকাতে আপনি যখন আপনার Apple বা Android অ্যাপ কনফিগার করবেন তখন আপনার এই মানটির প্রয়োজন হবে।

  2. অ্যাপল অ্যাপ্লিকেশন কনফিগার করা:

    1. আপনি যদি আপনার অ্যাপ্লিকেশন থেকে এই লিঙ্কগুলি পরিচালনা করার পরিকল্পনা করেন, বান্ডেল আইডিটি Firebase কনসোল প্রকল্প সেটিংসে নির্দিষ্ট করতে হবে। এছাড়াও, অ্যাপ স্টোর আইডি এবং অ্যাপল ডেভেলপার টিম আইডিও নির্দিষ্ট করতে হবে।
    2. এছাড়াও আপনাকে আপনার ইমেল অ্যাকশন হ্যান্ডলার ডোমেনটিকে আপনার অ্যাপ্লিকেশন ক্ষমতায় একটি অ্যাসোসিয়েটেড ডোমেন হিসাবে কনফিগার করতে হবে৷ ডিফল্টরূপে, ইমেল অ্যাকশন হ্যান্ডলার নিম্নলিখিত উদাহরণের মতো একটি ডোমেনে হোস্ট করা হয়:
      APP_ID.firebaseapp.com
    3. আপনি যদি আপনার অ্যাপ্লিকেশনটি iOS সংস্করণ 8 এবং তার নীচে বিতরণ করার পরিকল্পনা করেন, তাহলে আপনাকে আগত URLগুলির জন্য একটি কাস্টম স্কিম হিসাবে আপনার বান্ডেল আইডি সেট করতে হবে৷
    4. এই বিষয়ে আরও জানতে, অ্যাপল প্ল্যাটফর্মের ডায়নামিক লিঙ্ক নির্দেশাবলী প্রাপ্তি পড়ুন।

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

সুইফট

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

উদ্দেশ্য-C

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

উদ্দেশ্য-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.
  }];

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

সুইফট

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

উদ্দেশ্য-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.
  }];

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

আপনি যদি আপনার প্রকল্পটি 15 সেপ্টেম্বর, 2023-এ বা তার পরে তৈরি করেন, তাহলে ইমেল গণনা সুরক্ষা ডিফল্টরূপে সক্ষম করা হয়। এই বৈশিষ্ট্যটি আপনার প্রকল্পের ব্যবহারকারীর অ্যাকাউন্টগুলির নিরাপত্তা উন্নত করে, কিন্তু এটি fetchSignInMethodsForEmail() পদ্ধতিটি নিষ্ক্রিয় করে, যা আমরা পূর্বে শনাক্তকারী-প্রথম প্রবাহ বাস্তবায়নের জন্য সুপারিশ করেছিলাম।

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

আরো বিস্তারিত জানার জন্য ইমেল গণনা সুরক্ষার ডকুমেন্টেশন দেখুন।

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

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

  • আপনার অ্যাপে, আপনি 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)
}

উদ্দেশ্য-C

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

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