আপনি যদি আইডেন্টিটি প্ল্যাটফর্ম সহ ফায়ারবেস অথেনটিকেশনে আপগ্রেড করে থাকেন, তাহলে আপনার ফ্লাটার অ্যাপে এসএমএস মাল্টি-ফ্যাক্টর অথেনটিকেশন যোগ করতে পারবেন।
মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) আপনার অ্যাপের নিরাপত্তা বাড়ায়। যদিও আক্রমণকারীরা প্রায়শই পাসওয়ার্ড এবং সোশ্যাল অ্যাকাউন্ট হ্যাক করে ফেলে, একটি টেক্সট মেসেজ ইন্টারসেপ্ট করা আরও কঠিন।
শুরু করার আগে
অন্তত একটি প্রোভাইডার সক্রিয় করুন যা মাল্টি-ফ্যাক্টর অথেনটিকেশন সমর্থন করে। ফোন অথেনটিকেশন, অ্যানোনিমাস অথেনটিকেশন এবং অ্যাপল গেম সেন্টার ছাড়া প্রত্যেক প্রোভাইডারই এমএফএ সমর্থন করে।
আপনার অ্যাপ যেন ব্যবহারকারীর ইমেল যাচাই করে, তা নিশ্চিত করুন। মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) এর জন্য ইমেল যাচাইকরণ প্রয়োজন। এটি ক্ষতিকারক ব্যক্তিদেরকে অন্যের ইমেল ব্যবহার করে কোনো পরিষেবাতে নিবন্ধন করা এবং তারপর দ্বিতীয় একটি ধাপ যোগ করে আসল মালিককে পরিষেবা থেকে বাদ দেওয়া থেকে বিরত রাখে।
অ্যান্ড্রয়েড : আপনি যদি ফায়ারবেস কনসোলে আপনার অ্যাপের SHA-256 হ্যাশ এখনও সেট না করে থাকেন, তবে তা করুন। আপনার অ্যাপের SHA-256 হ্যাশ খুঁজে বের করার তথ্যের জন্য "আপনার ক্লায়েন্ট প্রমাণীকরণ" দেখুন।
iOS : Xcode-এ, আপনার প্রোজেক্টের জন্য পুশ নোটিফিকেশন চালু করুন এবং নিশ্চিত করুন যে আপনার APNs অথেন্টিকেশন কী Firebase Cloud Messaging (FCM)-এর সাথে কনফিগার করা আছে। এছাড়াও, রিমোট নোটিফিকেশনের জন্য আপনাকে অবশ্যই ব্যাকগ্রাউন্ড মোড চালু করতে হবে। এই ধাপটির বিস্তারিত ব্যাখ্যার জন্য, Firebase iOS Phone Auth ডকুমেন্টেশন দেখুন।
ওয়েব : নিশ্চিত করুন যে আপনি Firebase কনসোলে , 'OAuth redirect domains'-এর অধীনে আপনার অ্যাপ্লিকেশনের ডোমেইনটি যোগ করেছেন।
মাল্টি-ফ্যাক্টর অথেন্টিকেশন সক্রিয় করা
Firebase কনসোলের Authentication > Sign-in method পেজটি খুলুন।
অ্যাডভান্সড সেকশনে, এসএমএস মাল্টি-ফ্যাক্টর অথেনটিকেশন চালু করুন।
আপনার অ্যাপটি পরীক্ষা করার জন্য যে ফোন নম্বরগুলো ব্যবহার করবেন, সেগুলোও প্রবেশ করানো উচিত। যদিও এটি ঐচ্ছিক, তবে ডেভেলপমেন্টের সময় স্পিড কমে যাওয়া (থ্রটলিং) এড়ানোর জন্য টেস্ট ফোন নম্বর রেজিস্টার করার জন্য জোরালোভাবে সুপারিশ করা হয়।
আপনি যদি ইতিমধ্যেই আপনার অ্যাপের ডোমেইনটিকে অনুমোদন না দিয়ে থাকেন, তাহলে Firebase কনসোলের Authentication > Settings পৃষ্ঠায় গিয়ে এটিকে অনুমতি তালিকায় যুক্ত করুন।
তালিকাভুক্তির ধরণ নির্বাচন করা
আপনার অ্যাপে মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হবে কিনা, এবং কীভাবে ও কখন আপনার ব্যবহারকারীদের নথিভুক্ত করবেন, তা আপনি বেছে নিতে পারেন। কিছু সাধারণ প্যাটার্নের মধ্যে রয়েছে:
নিবন্ধনের অংশ হিসেবে ব্যবহারকারীর দ্বিতীয় ফ্যাক্টরটি নথিভুক্ত করুন। আপনার অ্যাপে যদি সকল ব্যবহারকারীর জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হয়, তবে এই পদ্ধতিটি ব্যবহার করুন।
নিবন্ধনের সময় দ্বিতীয় ফ্যাক্টর যুক্ত করার জন্য একটি এড়িয়ে যাওয়ার মতো বিকল্প রাখুন। যেসব অ্যাপ মাল্টি-ফ্যাক্টর অথেনটিকেশনকে উৎসাহিত করতে চায়, কিন্তু বাধ্যতামূলক করতে চায় না, তারা এই পদ্ধতিটি পছন্দ করতে পারে।
সাইন আপ স্ক্রিনের পরিবর্তে ব্যবহারকারীর অ্যাকাউন্ট বা প্রোফাইল ম্যানেজমেন্ট পেজ থেকে দ্বিতীয় ফ্যাক্টর যোগ করার সুবিধা দিন। এটি রেজিস্ট্রেশন প্রক্রিয়ার জটিলতা কমায়, এবং একই সাথে নিরাপত্তা-সংবেদনশীল ব্যবহারকারীদের জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন উপলব্ধ রাখে।
যখন ব্যবহারকারী বর্ধিত নিরাপত্তা প্রয়োজন এমন ফিচারগুলো অ্যাক্সেস করতে চাইবেন, তখন পর্যায়ক্রমে দ্বিতীয় ফ্যাক্টর যুক্ত করার প্রয়োজন হবে।
দ্বিতীয় ফ্যাক্টর নথিভুক্ত করা
একজন ব্যবহারকারীর জন্য একটি নতুন সেকেন্ডারি ফ্যাক্টর নথিভুক্ত করতে:
ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।
ব্যবহারকারীকে তার ফোন নম্বর লিখতে বলুন।
ব্যবহারকারীর জন্য একটি মাল্টি-ফ্যাক্টর সেশন নিন:
final multiFactorSession = await user.multiFactor.getSession();মাল্টি ফ্যাক্টর সেশন এবং আপনার কলব্যাকের মাধ্যমে ফোন নম্বরটি যাচাই করুন:
await FirebaseAuth.instance.verifyPhoneNumber( multiFactorSession: multiFactorSession, phoneNumber: phoneNumber, verificationCompleted: (_) {}, verificationFailed: (_) {}, codeSent: (String verificationId, int? resendToken) async { // The SMS verification code has been sent to the provided phone number. // ... }, codeAutoRetrievalTimeout: (_) {}, );এসএমএস কোডটি পাঠানো হয়ে গেলে, ব্যবহারকারীকে কোডটি যাচাই করতে বলুন:
final credential = PhoneAuthProvider.credential( verificationId: verificationId, smsCode: smsCode, );নিবন্ধন সম্পন্ন করুন:
await user.multiFactor.enroll( PhoneMultiFactorGenerator.getAssertion( credential, ), );
নিচের কোডটিতে দ্বিতীয় ফ্যাক্টর নথিভুক্ত করার একটি সম্পূর্ণ উদাহরণ দেখানো হয়েছে:
final session = await user.multiFactor.getSession();
final auth = FirebaseAuth.instance;
await auth.verifyPhoneNumber(
multiFactorSession: session,
phoneNumber: phoneController.text,
verificationCompleted: (_) {},
verificationFailed: (_) {},
codeSent: (String verificationId, int? resendToken) async {
// See `firebase_auth` example app for a method of retrieving user's sms code:
// https://github.com/firebase/flutterfire/blob/main/packages/firebase_auth/firebase_auth/example/lib/auth.dart#L591
final smsCode = await getSmsCodeFromUser(context);
if (smsCode != null) {
// Create a PhoneAuthCredential with the code
final credential = PhoneAuthProvider.credential(
verificationId: verificationId,
smsCode: smsCode,
);
try {
await user.multiFactor.enroll(
PhoneMultiFactorGenerator.getAssertion(
credential,
),
);
} on FirebaseAuthException catch (e) {
print(e.message);
}
}
},
codeAutoRetrievalTimeout: (_) {},
);
অভিনন্দন! আপনি সফলভাবে একজন ব্যবহারকারীর জন্য দ্বিতীয় প্রমাণীকরণ ফ্যাক্টরটি নিবন্ধন করেছেন।
দ্বিতীয় ফ্যাক্টর ব্যবহার করে ব্যবহারকারীদের সাইন ইন করানো
দ্বি-স্তরীয় এসএমএস যাচাইকরণের মাধ্যমে একজন ব্যবহারকারীকে সাইন ইন করতে:
ব্যবহারকারীকে তার প্রথম ফ্যাক্টর দিয়ে সাইন ইন করান, তারপর
FirebaseAuthMultiFactorExceptionএক্সেপশনটি ধরুন। এই এররটিতে একটি রিজলভার থাকে, যা ব্যবহার করে আপনি ব্যবহারকারীর এনরোল করা দ্বিতীয় ফ্যাক্টরগুলো পেতে পারেন। এতে একটি অন্তর্নিহিত সেশনও থাকে, যা প্রমাণ করে যে ব্যবহারকারী তার প্রথম ফ্যাক্টর দিয়ে সফলভাবে অথেন্টিকেট করেছেন।উদাহরণস্বরূপ, যদি ব্যবহারকারীর প্রথম ধাপটি একটি ইমেল এবং পাসওয়ার্ড হয়:
try { await _auth.signInWithEmailAndPassword( email: emailController.text, password: passwordController.text, ); // User is not enrolled with a second factor and is successfully // signed in. // ... } on FirebaseAuthMultiFactorException catch (e) { // The user is a multi-factor user. Second factor challenge is required final resolver = e.resolver // ... }যদি ব্যবহারকারীর একাধিক সেকেন্ডারি ফ্যাক্টর নথিভুক্ত করা থাকে, তাহলে তাদের জিজ্ঞাসা করুন কোনটি ব্যবহার করতে হবে:
final session = e.resolver.session; final hint = e.resolver.hints[selectedHint];ইঙ্গিত এবং মাল্টি-ফ্যাক্টর সেশন সহ ব্যবহারকারীর ফোনে একটি যাচাইকরণ বার্তা পাঠান:
await FirebaseAuth.instance.verifyPhoneNumber( multiFactorSession: session, multiFactorInfo: hint, verificationCompleted: (_) {}, verificationFailed: (_) {}, codeSent: (String verificationId, int? resendToken) async { // ... }, codeAutoRetrievalTimeout: (_) {}, );দ্বিতীয় প্রমাণীকরণ সম্পন্ন করতে
resolver.resolveSignIn()কল করুন:final smsCode = await getSmsCodeFromUser(context); if (smsCode != null) { // Create a PhoneAuthCredential with the code final credential = PhoneAuthProvider.credential( verificationId: verificationId, smsCode: smsCode, ); try { await e.resolver.resolveSignIn( PhoneMultiFactorGenerator.getAssertion(credential) ); } on FirebaseAuthException catch (e) { print(e.message); } }
নিচের কোডটিতে একজন মাল্টি-ফ্যাক্টর ব্যবহারকারীকে সাইন ইন করার একটি সম্পূর্ণ উদাহরণ দেখানো হয়েছে:
try {
await _auth.signInWithEmailAndPassword(
email: emailController.text,
password: passwordController.text,
);
} on FirebaseAuthMultiFactorException catch (e) {
setState(() {
error = '${e.message}';
});
final firstHint = e.resolver.hints.first;
if (firstHint is! PhoneMultiFactorInfo) {
return;
}
await FirebaseAuth.instance.verifyPhoneNumber(
multiFactorSession: e.resolver.session,
multiFactorInfo: firstHint,
verificationCompleted: (_) {},
verificationFailed: (_) {},
codeSent: (String verificationId, int? resendToken) async {
// See `firebase_auth` example app for a method of retrieving user's sms code:
// https://github.com/firebase/flutterfire/blob/main/packages/firebase_auth/firebase_auth/example/lib/auth.dart#L591
final smsCode = await getSmsCodeFromUser(context);
if (smsCode != null) {
// Create a PhoneAuthCredential with the code
final credential = PhoneAuthProvider.credential(
verificationId: verificationId,
smsCode: smsCode,
);
try {
await e.resolver.resolveSignIn(
PhoneMultiFactorGenerator.getAssertion(
credential,
),
);
} on FirebaseAuthException catch (e) {
print(e.message);
}
}
},
codeAutoRetrievalTimeout: (_) {},
);
} catch (e) {
...
}
অভিনন্দন! আপনি মাল্টি-ফ্যাক্টর অথেনটিকেশন ব্যবহার করে সফলভাবে একজন ব্যবহারকারীকে সাইন ইন করিয়েছেন।
এরপর কী?
- অ্যাডমিন এসডিকে ব্যবহার করে প্রোগ্রাম্যাটিকভাবে মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন ।