আপনি Firebase Authentication ব্যবহার করে একজন ব্যবহারকারীকে একটি লিঙ্ক সম্বলিত ইমেল পাঠিয়ে সাইন ইন করতে পারেন, যেটিতে ক্লিক করে তারা সাইন ইন করতে পারবেন। এই প্রক্রিয়ায়, ব্যবহারকারীর ইমেল ঠিকানাও যাচাই করা হয়।
ইমেলের মাধ্যমে সাইন ইন করার অনেক সুবিধা রয়েছে:
- কম ঘর্ষণ সাইন-আপ এবং সাইন-ইন।
- অ্যাপ্লিকেশন জুড়ে পাসওয়ার্ড পুনঃব্যবহারের ঝুঁকি কম, যা এমনকি সঠিকভাবে নির্বাচিত পাসওয়ার্ডের নিরাপত্তাও নষ্ট করতে পারে।
- একজন ব্যবহারকারীকে প্রমাণীকরণ করার ক্ষমতা এবং সেই সাথে যাচাই করার ক্ষমতা যে ব্যবহারকারীই একটি ইমেল ঠিকানার বৈধ মালিক।
- সাইন ইন করার জন্য একজন ব্যবহারকারীর শুধুমাত্র একটি অ্যাক্সেসযোগ্য ইমেল অ্যাকাউন্ট প্রয়োজন। ফোন নম্বর বা সোশ্যাল মিডিয়া অ্যাকাউন্টের মালিকানা প্রয়োজন হয় না।
- একজন ব্যবহারকারী পাসওয়ার্ড প্রদান (বা মনে রাখার) প্রয়োজন ছাড়াই নিরাপদে সাইন ইন করতে পারেন, যা মোবাইল ডিভাইসে কষ্টকর হতে পারে।
- একজন বিদ্যমান ব্যবহারকারী যিনি পূর্বে একটি ইমেল শনাক্তকারী (পাসওয়ার্ড বা ফেডারেটেড) দিয়ে সাইন ইন করেছেন, তাকে কেবল ইমেল দিয়ে সাইন ইন করতে আপগ্রেড করা যেতে পারে। উদাহরণস্বরূপ, একজন ব্যবহারকারী যিনি তাদের পাসওয়ার্ড ভুলে গেছেন তিনি এখনও তাদের পাসওয়ার্ড রিসেট না করেই সাইন ইন করতে পারেন।
শুরু করার আগে
যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে শুরু করুন নির্দেশিকার ধাপগুলি অনুসরণ করুন।
আপনার Firebase প্রকল্পের জন্য ইমেল লিঙ্ক সাইন-ইন সক্ষম করুন।
ইমেল লিঙ্কের মাধ্যমে ব্যবহারকারীদের সাইন ইন করতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য ইমেল প্রদানকারী এবং ইমেল লিঙ্ক সাইন-ইন পদ্ধতি সক্ষম করতে হবে:
- Firebase কনসোলে , Auth বিভাগটি খুলুন।
- সাইন ইন পদ্ধতি ট্যাবে, ইমেল/পাসওয়ার্ড প্রদানকারী সক্ষম করুন। মনে রাখবেন যে ইমেল লিঙ্ক সাইন-ইন ব্যবহার করার জন্য ইমেল/পাসওয়ার্ড সাইন-ইন সক্ষম থাকতে হবে।
- একই বিভাগে, ইমেল লিঙ্ক (পাসওয়ার্ডহীন সাইন-ইন) সাইন-ইন পদ্ধতি সক্ষম করুন।
- সংরক্ষণ করুন ক্লিক করুন।
ব্যবহারকারীর ইমেল ঠিকানায় একটি প্রমাণীকরণ লিঙ্ক পাঠান
প্রমাণীকরণ প্রবাহ শুরু করতে, একটি ইন্টারফেস উপস্থাপন করুন যা ব্যবহারকারীকে তাদের ইমেল ঠিকানা প্রদান করতে অনুরোধ করবে এবং তারপর sendSignInLinkToEmail() কল করে Firebase কে ব্যবহারকারীর ইমেলে প্রমাণীকরণ লিঙ্কটি পাঠাতে অনুরোধ করবে।
ActionCodeSettings অবজেক্টটি তৈরি করুন, যা Firebase কে ইমেল লিঙ্কটি কীভাবে তৈরি করতে হয় তার নির্দেশাবলী প্রদান করে। নিম্নলিখিত ক্ষেত্রগুলি সেট করুন:
url: এম্বেড করার জন্য ডিপ লিঙ্ক এবং যেকোনো অতিরিক্ত অবস্থা। লিঙ্কের ডোমেনটি Firebase Console অনুমোদিত ডোমেনের তালিকায় উপস্থিত থাকতে হবে, যা সেটিংস ট্যাবে গিয়ে পাওয়া যাবে (প্রমাণীকরণ -> সেটিংস -> অনুমোদিত ডোমেন)। যদি ব্যবহারকারীর ডিভাইসে অ্যাপটি ইনস্টল না থাকে এবং অ্যাপটি ইনস্টল করা সম্ভব না হয় তবে লিঙ্কটি ব্যবহারকারীকে এই URL এ পুনঃনির্দেশিত করবে।androidPackageNameএবংIOSBundleId: Android বা iOS ডিভাইসে সাইন-ইন লিঙ্ক খোলার সময় যে অ্যাপগুলি ব্যবহার করা হবে। মোবাইল অ্যাপের মাধ্যমে ইমেল অ্যাকশন লিঙ্কগুলি খোলার জন্য Firebase Dynamic Links কীভাবে কনফিগার করবেন সে সম্পর্কে আরও জানুন।handleCodeInApp:trueতে সেট করুন। অন্যান্য আউট অফ ব্যান্ড ইমেল অ্যাকশন (পাসওয়ার্ড রিসেট এবং ইমেল যাচাইকরণ) এর বিপরীতে সাইন-ইন অপারেশনটি সর্বদা অ্যাপে সম্পন্ন করতে হবে। এর কারণ হল, ফ্লো শেষে, ব্যবহারকারী সাইন ইন থাকবেন এবং অ্যাপের মধ্যে তাদের Auth অবস্থা বজায় থাকবে বলে আশা করা হচ্ছে।dynamicLinkDomain: (অপ্রচলিত,linkDomainব্যবহার করুন) যখন একটি প্রকল্পের জন্য একাধিক কাস্টম ডায়নামিক লিঙ্ক ডোমেন সংজ্ঞায়িত করা হয়, তখন নির্দিষ্ট মোবাইল অ্যাপ (উদাহরণস্বরূপ,example.page.link) ব্যবহার করে লিঙ্কটি খোলার সময় কোনটি ব্যবহার করবেন তা নির্দিষ্ট করুন। অন্যথায় প্রথম ডোমেনটি স্বয়ংক্রিয়ভাবে নির্বাচিত হয়ে যাবে।linkDomain: একটি নির্দিষ্ট মোবাইল অ্যাপ ব্যবহার করে লিঙ্কটি খোলার সময় ব্যবহার করার জন্য ঐচ্ছিক কাস্টম Firebase হোস্টিং ডোমেন। ডোমেনটি Firebase হোস্টিং-এ কনফিগার করা আবশ্যক এবং প্রকল্পের মালিকানাধীন। এটি একটি ডিফল্ট হোস্টিং ডোমেন (web.appবাfirebaseapp.com) হতে পারে না। এটি অপ্রচলিতdynamicLinkDomainসেটিং প্রতিস্থাপন করে।
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');ব্যবহারকারীর কাছ থেকে তাদের ইমেল জিজ্ঞাসা করুন।
ব্যবহারকারীর ইমেলে প্রমাণীকরণ লিঙ্কটি পাঠান, এবং ব্যবহারকারী একই ডিভাইসে ইমেল সাইন-ইন সম্পন্ন করলে ব্যবহারকারীর ইমেলটি সংরক্ষণ করুন।
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 Dynamic Links বন্ধ করা হয়েছে; Firebase Hosting এখন সাইন-ইন লিঙ্ক পাঠানোর জন্য ব্যবহৃত হয়। প্ল্যাটফর্ম নির্দিষ্ট কনফিগারেশনের জন্য নির্দেশিকা অনুসরণ করুন:
ইমেল লিঙ্ক যাচাই করুন এবং সাইন ইন করুন
মোবাইল অ্যাপ্লিকেশনের মাধ্যমে সাইন-ইন সম্পূর্ণ করার জন্য, অ্যাপ্লিকেশনটিকে এমনভাবে কনফিগার করতে হবে যাতে আগত অ্যাপ্লিকেশন লিঙ্কটি সনাক্ত করা যায়, অন্তর্নিহিত ডিপ লিঙ্কটি বিশ্লেষণ করা যায় এবং তারপর সাইন-ইন সম্পূর্ণ করা যায়।
আপনার লিঙ্ক হ্যান্ডলারে, লিঙ্কটি ইমেল লিঙ্ক প্রমাণীকরণের জন্য কিনা তা পরীক্ষা করুন এবং যদি তাই হয়, তাহলে সাইন-ইন প্রক্রিয়াটি সম্পূর্ণ করুন।
// 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.");
}
তবে, যেহেতু ফ্লোটি অন্য কোনও ডিভাইসে শেষ হতে পারে যেখানে মূল ব্যবহারকারী লগ ইন করেননি, তাই এই ফ্লোটি সম্পূর্ণ নাও হতে পারে। সেক্ষেত্রে, ব্যবহারকারীকে একটি ত্রুটি দেখানো হতে পারে যা তাদের একই ডিভাইসে লিঙ্কটি খুলতে বাধ্য করতে পারে। অপারেশনের ধরণ এবং ব্যবহারকারীর ইউআইডি সম্পর্কে তথ্য প্রদানের জন্য লিঙ্কটিতে কিছু অবস্থা পাস করা যেতে পারে।
বন্ধ করা হয়েছে: ইমেল লিঙ্ক থেকে ইমেল-পাসওয়ার্ডকে আলাদা করা
যদি আপনি ১৫ সেপ্টেম্বর, ২০২৩ তারিখে বা তার পরে আপনার প্রকল্প তৈরি করে থাকেন, তাহলে ইমেল গণনা সুরক্ষা ডিফল্টরূপে সক্রিয় থাকে। এই বৈশিষ্ট্যটি আপনার প্রকল্পের ব্যবহারকারী অ্যাকাউন্টগুলির নিরাপত্তা উন্নত করে, কিন্তু এটি fetchSignInMethodsForEmail() পদ্ধতিটি অক্ষম করে, যা আমরা পূর্বে identifier-first flows বাস্তবায়নের জন্য সুপারিশ করেছিলাম।
যদিও আপনি আপনার প্রকল্পের জন্য ইমেল গণনা সুরক্ষা অক্ষম করতে পারেন, আমরা তা না করার পরামর্শ দিচ্ছি।
আরও বিস্তারিত জানার জন্য ইমেল গণনা সুরক্ষা সম্পর্কিত ডকুমেন্টেশন দেখুন।
পরবর্তী পদক্ষেপ
একজন ব্যবহারকারী একটি নতুন অ্যাকাউন্ট তৈরি করার পর, এই অ্যাকাউন্টটি আপনার Firebase প্রকল্পের অংশ হিসাবে সংরক্ষণ করা হয় এবং ব্যবহারকারী যে সাইন-ইন পদ্ধতি ব্যবহার করেছেন তা নির্বিশেষে, আপনার প্রকল্পের প্রতিটি অ্যাপ জুড়ে একজন ব্যবহারকারীকে সনাক্ত করতে এটি ব্যবহার করা যেতে পারে।
আপনার অ্যাপগুলিতে, আপনি User অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা করুন দেখুন।
আপনার Firebase রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সুরক্ষা নিয়মে, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।
আপনি ব্যবহারকারীদের একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন (auth প্রদানকারীর শংসাপত্রগুলি ) একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে লিঙ্ক করে ।
কোনও ব্যবহারকারীকে সাইন আউট করতে, signOut() এ কল করুন:
await FirebaseAuth.instance.signOut();