ইমেল লিঙ্ক ব্যবহার করে Firebase এর সাথে প্রমাণীকরণ করুন

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

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

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

তুমি শুরু করার আগে

  1. যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে শুরু করুন গাইডের ধাপগুলি অনুসরণ করুন৷

  2. আপনার Firebase প্রকল্পের জন্য ইমেল লিঙ্ক সাইন-ইন সক্ষম করুন।

    ইমেল লিঙ্ক দ্বারা ব্যবহারকারীদের সাইন ইন করতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য ইমেল প্রদানকারী এবং ইমেল লিঙ্ক সাইন-ইন পদ্ধতি সক্ষম করতে হবে:

    1. Firebase কনসোলে , Auth বিভাগটি খুলুন।
    2. সাইন ইন পদ্ধতি ট্যাবে, ইমেল/পাসওয়ার্ড প্রদানকারী সক্ষম করুন। নোট করুন যে ইমেল লিঙ্ক সাইন-ইন ব্যবহার করার জন্য ইমেল/পাসওয়ার্ড সাইন-ইন অবশ্যই সক্রিয় থাকতে হবে।
    3. একই বিভাগে, ইমেল লিঙ্ক (পাসওয়ার্ডবিহীন সাইন-ইন) সাইন-ইন পদ্ধতি সক্ষম করুন।
    4. Save এ ক্লিক করুন।

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

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

    • url : এম্বেড করার গভীর লিঙ্ক এবং যেকোন অতিরিক্ত অবস্থা পাস করতে হবে। লিঙ্কের ডোমেনটিকে অনুমোদিত ডোমেনের Firebase কনসোলের তালিকায় সাদা তালিকাভুক্ত করতে হবে, যা সাইন-ইন পদ্ধতি ট্যাবে গিয়ে (প্রমাণিকরণ -> সাইন-ইন পদ্ধতি) পাওয়া যাবে। লিঙ্কটি ব্যবহারকারীকে এই URL-এ পুনঃনির্দেশ করবে যদি অ্যাপটি তাদের ডিভাইসে ইনস্টল করা না থাকে এবং অ্যাপটি ইনস্টল করা সম্ভব না হয়।

    • androidPackageName এবং IOSBundleId : যখন একটি Android বা iOS ডিভাইসে সাইন-ইন লিঙ্ক খোলা হয় তখন যে অ্যাপগুলি ব্যবহার করতে হবে৷ মোবাইল অ্যাপের মাধ্যমে ইমেল অ্যাকশন লিঙ্কগুলি খুলতে Firebase ডায়নামিক লিঙ্কগুলি কীভাবে কনফিগার করবেন সে সম্পর্কে আরও জানুন।

    • handleCodeInApp : true সেট করুন। সাইন-ইন অপারেশনটি সর্বদা অ্যাপে সম্পূর্ণ করতে হবে অন্যান্য ব্যান্ড ইমেল অ্যাকশনের বিপরীতে (পাসওয়ার্ড রিসেট এবং ইমেল যাচাইকরণ)। এর কারণ হল, প্রবাহের শেষে, ব্যবহারকারী সাইন ইন করবেন বলে আশা করা হচ্ছে এবং অ্যাপের মধ্যে তাদের প্রমাণীকরণ স্থিতি বজায় থাকবে।

    • dynamicLinkDomain : যখন একটি প্রকল্পের জন্য একাধিক কাস্টম ডায়নামিক লিঙ্ক ডোমেন সংজ্ঞায়িত করা হয়, নির্দিষ্ট মোবাইল অ্যাপের মাধ্যমে লিঙ্কটি খোলার সময় কোনটি ব্যবহার করতে হবে তা নির্দিষ্ট করুন (উদাহরণস্বরূপ, example.page.link )। অন্যথায় প্রথম ডোমেইন স্বয়ংক্রিয়ভাবে নির্বাচিত হয়।

    var acs = ActionCodeSettings(
        // URL you want to redirect back to. The domain (www.example.com) for this
        // URL must be whitelisted in the Firebase Console.
        url: 'https://www.example.com/finishSignUp?cartId=1234',
        // This must be true
        handleCodeInApp: true,
        iOSBundleId: 'com.example.ios',
        androidPackageName: 'com.example.android',
        // installIfNotAvailable
        androidInstallApp: true,
        // minimumVersion
        androidMinimumVersion: '12');
    
  2. ব্যবহারকারীকে তাদের ইমেলের জন্য জিজ্ঞাসা করুন।

  3. ব্যবহারকারীর ইমেলে প্রমাণীকরণ লিঙ্কটি পাঠান এবং ব্যবহারকারীর ইমেলটি সংরক্ষণ করুন যদি ব্যবহারকারী একই ডিভাইসে ইমেল সাইন-ইন সম্পূর্ণ করেন।

    var emailAuth = 'someemail@domain.com';
    FirebaseAuth.instance.sendSignInLinkToEmail(
            email: emailAuth, actionCodeSettings: acs)
        .catchError((onError) => print('Error sending email verification $onError'))
        .then((value) => print('Successfully sent email verification'));
    });
    

নিরাপত্তা উদ্বেগ

একটি অনিচ্ছাকৃত ব্যবহারকারী হিসাবে বা একটি অনিচ্ছাকৃত ডিভাইসে সাইন ইন করার জন্য একটি সাইন-ইন লিঙ্ক ব্যবহার করা থেকে প্রতিরোধ করার জন্য, Firebase Auth-এর জন্য সাইন-ইন প্রবাহ সম্পূর্ণ করার সময় ব্যবহারকারীর ইমেল ঠিকানা প্রদান করা প্রয়োজন৷ সাইন-ইন সফল হওয়ার জন্য, এই ইমেল ঠিকানাটি অবশ্যই যে ঠিকানায় সাইন-ইন লিঙ্কটি পাঠানো হয়েছিল তার সাথে মেলে।

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

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

এছাড়াও নিশ্চিত করুন যে আপনি প্রোডাকশনে একটি HTTPS URL ব্যবহার করছেন যাতে আপনার লিঙ্কটি মধ্যস্থতাকারী সার্ভার দ্বারা সম্ভাব্যভাবে বাধা না দেওয়া হয়।

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

  1. গাইডে ফ্লটারে ডায়নামিক লিঙ্ক পেতে আপনার অ্যাপ সেট আপ করুন।

  2. আপনার লিঙ্ক হ্যান্ডলারে, লিঙ্কটি ইমেল লিঙ্ক প্রমাণীকরণের জন্য বোঝানো হয়েছে কিনা তা পরীক্ষা করুন এবং যদি তাই হয়, সাইন-ইন প্রক্রিয়াটি সম্পূর্ণ করুন।

    // Confirm the link is a sign-in with email link.
    if (FirebaseAuth.instance.isSignInWithEmailLink(emailLink)) {
      try {
        // The client SDK will parse the code from the link for you.
        final userCredential = await FirebaseAuth.instance
            .signInWithEmailLink(email: emailAuth, emailLink: emailLink);
    
        // You can access the new user via userCredential.user.
        final emailAddress = userCredential.user?.email;
    
        print('Successfully signed in with email link!');
      } catch (error) {
        print('Error signing in with email link.');
      }
    }
    

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

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

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.linkWithCredential(authCredential);
} catch (error) {
    print("Error linking emailLink credential.");
}

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

final authCredential = EmailAuthProvider
    .credentialWithLink(email: emailAuth, emailLink: emailLink.toString());
try {
    await FirebaseAuth.instance.currentUser
        ?.reauthenticateWithCredential(authCredential);
} catch (error) {
    print("Error reauthenticating credential.");
}

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

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

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

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

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

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

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

আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সুরক্ষা নিয়মে, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

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

একজন ব্যবহারকারীকে সাইন আউট করতে, signOut() কল করুন :

await FirebaseAuth.instance.signOut();