আপনি যদি Firebase Authentication with Identity Platform আপগ্রেড করে থাকেন, তাহলে আপনার ওয়েব অ্যাপে এসএমএস মাল্টি-ফ্যাক্টর অথেনটিকেশন যোগ করতে পারবেন।
মাল্টি-ফ্যাক্টর অথেনটিকেশন আপনার অ্যাপের নিরাপত্তা বাড়ায়। যদিও আক্রমণকারীরা প্রায়শই পাসওয়ার্ড এবং সোশ্যাল অ্যাকাউন্ট হ্যাক করে ফেলে, একটি টেক্সট মেসেজ ইন্টারসেপ্ট করা আরও কঠিন।
শুরু করার আগে
অন্তত একটি প্রোভাইডার সক্রিয় করুন যা মাল্টি-ফ্যাক্টর অথেনটিকেশন সমর্থন করে। ফোন অথেনটিকেশন, অ্যানোনিমাস অথেনটিকেশন এবং অ্যাপল গেম সেন্টার ছাড়া প্রত্যেক প্রোভাইডারই এমএফএ সমর্থন করে।
যে অঞ্চলগুলিতে আপনি এসএমএস প্রমাণীকরণ ব্যবহার করার পরিকল্পনা করছেন, সেগুলি সক্রিয় করুন। Firebase একটি সম্পূর্ণ ব্লকিং এসএমএস অঞ্চল নীতি ব্যবহার করে, যা ডিফল্টরূপে আপনার প্রোজেক্টগুলিকে আরও সুরক্ষিত অবস্থায় তৈরি করতে সহায়তা করে।
আপনার অ্যাপ যেন ব্যবহারকারীর ইমেল যাচাই করে, তা নিশ্চিত করুন। মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) এর জন্য ইমেল যাচাইকরণ প্রয়োজন। এটি ক্ষতিকারক ব্যক্তিদেরকে অন্যের ইমেল ব্যবহার করে কোনো পরিষেবাতে নিবন্ধন করা এবং তারপর দ্বিতীয় একটি ধাপ যোগ করে আসল মালিককে পরিষেবা থেকে বাদ দেওয়া থেকে বিরত রাখে।
মাল্টি-টেনেন্সি ব্যবহার করে
আপনি যদি একটি মাল্টি-টেন্যান্ট পরিবেশে ব্যবহারের জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন চালু করেন, তাহলে (এই নথির বাকি নির্দেশাবলীর পাশাপাশি) নিম্নলিখিত ধাপগুলি অবশ্যই সম্পন্ন করুন:
গুগল ক্লাউড কনসোলে, আপনি যে টেন্যান্টটি নিয়ে কাজ করতে চান সেটি নির্বাচন করুন।
আপনার কোডে,
Authইনস্ট্যান্সেরtenantIdফিল্ডটিতে আপনার টেন্যান্টের আইডি সেট করুন। উদাহরণস্বরূপ:Web
import { getAuth } from "firebase/auth"; const auth = getAuth(app); auth.tenantId = "myTenantId1";Web
firebase.auth().tenantId = 'myTenantId1';
মাল্টি-ফ্যাক্টর অথেন্টিকেশন সক্রিয় করা
Firebase কনসোলের Authentication > Sign-in method পেজটি খুলুন।
অ্যাডভান্সড সেকশনে, এসএমএস মাল্টি-ফ্যাক্টর অথেনটিকেশন চালু করুন।
আপনার অ্যাপটি পরীক্ষা করার জন্য যে ফোন নম্বরগুলো ব্যবহার করবেন, সেগুলোও প্রবেশ করানো উচিত। যদিও এটি ঐচ্ছিক, তবে ডেভেলপমেন্টের সময় স্পিড কমে যাওয়া (থ্রটলিং) এড়ানোর জন্য টেস্ট ফোন নম্বর রেজিস্টার করার জন্য জোরালোভাবে সুপারিশ করা হয়।
আপনি যদি ইতিমধ্যেই আপনার অ্যাপের ডোমেইনটিকে অনুমোদন না দিয়ে থাকেন, তাহলে Firebase কনসোলের Authentication > Settings পৃষ্ঠায় গিয়ে এটিকে অনুমতি তালিকায় যুক্ত করুন।
তালিকাভুক্তির ধরণ নির্বাচন করা
আপনার অ্যাপে মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হবে কিনা, এবং কীভাবে ও কখন আপনার ব্যবহারকারীদের নথিভুক্ত করবেন, তা আপনি বেছে নিতে পারেন। কিছু সাধারণ প্যাটার্নের মধ্যে রয়েছে:
নিবন্ধনের অংশ হিসেবে ব্যবহারকারীর দ্বিতীয় ফ্যাক্টরটি নথিভুক্ত করুন। আপনার অ্যাপে যদি সকল ব্যবহারকারীর জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হয়, তবে এই পদ্ধতিটি ব্যবহার করুন।
নিবন্ধনের সময় দ্বিতীয় ফ্যাক্টর যুক্ত করার জন্য একটি এড়িয়ে যাওয়ার মতো বিকল্প রাখুন। যেসব অ্যাপ মাল্টি-ফ্যাক্টর অথেনটিকেশনকে উৎসাহিত করতে চায়, কিন্তু বাধ্যতামূলক করতে চায় না, তারা এই পদ্ধতিটি পছন্দ করতে পারে।
সাইন আপ স্ক্রিনের পরিবর্তে ব্যবহারকারীর অ্যাকাউন্ট বা প্রোফাইল ম্যানেজমেন্ট পেজ থেকে দ্বিতীয় ফ্যাক্টর যোগ করার সুবিধা দিন। এটি রেজিস্ট্রেশন প্রক্রিয়ার জটিলতা কমায়, এবং একই সাথে নিরাপত্তা-সংবেদনশীল ব্যবহারকারীদের জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন উপলব্ধ রাখে।
যখন ব্যবহারকারী বর্ধিত নিরাপত্তা প্রয়োজন এমন ফিচারগুলো অ্যাক্সেস করতে চাইবেন, তখন পর্যায়ক্রমে দ্বিতীয় ফ্যাক্টর যুক্ত করার প্রয়োজন হবে।
reCAPTCHA ভেরিফায়ার সেট আপ করা হচ্ছে
এসএমএস কোড পাঠানোর আগে, আপনাকে একটি reCAPTCHA ভেরিফায়ার কনফিগার করতে হবে। ফোন নম্বর যাচাইয়ের অনুরোধগুলো যেন আপনার অ্যাপের অনুমোদিত ডোমেইনগুলোর একটি থেকে আসে, তা নিশ্চিত করার মাধ্যমে অপব্যবহার রোধ করতে Firebase reCAPTCHA ব্যবহার করে।
আপনাকে ম্যানুয়ালি একটি reCAPTCHA ক্লায়েন্ট সেট আপ করতে হবে না; ক্লায়েন্ট SDK-এর RecaptchaVerifier অবজেক্টটি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় ক্লায়েন্ট কী এবং সিক্রেট তৈরি ও ইনিশিয়ালাইজ করে দেয়।
অদৃশ্য reCAPTCHA ব্যবহার করে
RecaptchaVerifier অবজেক্টটি অদৃশ্য reCAPTCHA সমর্থন করে, যা প্রায়শই কোনো ইন্টারঅ্যাকশনের প্রয়োজন ছাড়াই ব্যবহারকারীকে যাচাই করতে পারে। একটি অদৃশ্য reCAPTCHA ব্যবহার করতে, size প্যারামিটারটি invisible এ সেট করে একটি RecaptchaVerifier তৈরি করুন, এবং যে UI এলিমেন্টটি মাল্টি-ফ্যাক্টর এনরোলমেন্ট শুরু করে তার ID উল্লেখ করুন:
Web
import { RecaptchaVerifier, getAuth } from "firebase/auth";
const recaptchaVerifier = new RecaptchaVerifier(getAuth(), "sign-in-button", {
"size": "invisible",
"callback": function(response) {
// reCAPTCHA solved, you can proceed with
// phoneAuthProvider.verifyPhoneNumber(...).
onSolvedRecaptcha();
}
});
Web
var recaptchaVerifier = new firebase.auth.RecaptchaVerifier('sign-in-button', {
'size': 'invisible',
'callback': function(response) {
// reCAPTCHA solved, you can proceed with phoneAuthProvider.verifyPhoneNumber(...).
onSolvedRecaptcha();
}
});
reCAPTCHA উইজেট ব্যবহার করে
একটি দৃশ্যমান reCAPTCHA উইজেট ব্যবহার করতে, উইজেটটি ধারণ করার জন্য একটি HTML এলিমেন্ট তৈরি করুন, তারপর UI কন্টেইনারের ID দিয়ে একটি RecaptchaVerifier অবজেক্ট তৈরি করুন। এছাড়াও আপনি ঐচ্ছিকভাবে কলব্যাক সেট করতে পারেন, যা reCAPTCHA সমাধান হলে বা এর মেয়াদ শেষ হলে চালু হবে:
Web
import { RecaptchaVerifier, getAuth } from "firebase/auth";
const recaptchaVerifier = new RecaptchaVerifier(
getAuth(),
"recaptcha-container",
// Optional reCAPTCHA parameters.
{
"size": "normal",
"callback": function(response) {
// reCAPTCHA solved, you can proceed with
// phoneAuthProvider.verifyPhoneNumber(...).
onSolvedRecaptcha();
},
"expired-callback": function() {
// Response expired. Ask user to solve reCAPTCHA again.
// ...
}
}
);
Web
var recaptchaVerifier = new firebase.auth.RecaptchaVerifier(
'recaptcha-container',
// Optional reCAPTCHA parameters.
{
'size': 'normal',
'callback': function(response) {
// reCAPTCHA solved, you can proceed with phoneAuthProvider.verifyPhoneNumber(...).
// ...
onSolvedRecaptcha();
},
'expired-callback': function() {
// Response expired. Ask user to solve reCAPTCHA again.
// ...
}
});
reCAPTCHA-এর প্রি-রেন্ডারিং
ঐচ্ছিকভাবে, আপনি টু-ফ্যাক্টর এনরোলমেন্ট শুরু করার আগে reCAPTCHA প্রি-রেন্ডার করতে পারেন:
Web
recaptchaVerifier.render()
.then(function (widgetId) {
window.recaptchaWidgetId = widgetId;
});
Web
recaptchaVerifier.render()
.then(function(widgetId) {
window.recaptchaWidgetId = widgetId;
});
render() সফল হওয়ার পর, আপনি reCAPTCHA-এর উইজেট আইডিটি পাবেন, যা ব্যবহার করে আপনি reCAPTCHA API- তে কল করতে পারবেন।
var recaptchaResponse = grecaptcha.getResponse(window.recaptchaWidgetId);
RecaptchaVerifier তার verify মেথডের মাধ্যমে এই লজিকটিকে আড়াল করে রাখে, ফলে আপনাকে সরাসরি grecaptcha ভেরিয়েবলটি পরিচালনা করার প্রয়োজন হয় না।
দ্বিতীয় ফ্যাক্টর নথিভুক্ত করা
একজন ব্যবহারকারীর জন্য একটি নতুন সেকেন্ডারি ফ্যাক্টর নথিভুক্ত করতে:
ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।
ব্যবহারকারীকে তার ফোন নম্বর লিখতে বলুন।
পূর্ববর্তী বিভাগে বর্ণিত পদ্ধতি অনুসারে reCAPTCHA ভেরিফায়ারটি চালু করুন। যদি একটি RecaptchaVerifier ইনস্ট্যান্স আগে থেকেই কনফিগার করা থাকে, তাহলে এই ধাপটি এড়িয়ে যান:
Web
import { RecaptchaVerifier, getAuth } from "firebase/auth"; const recaptchaVerifier = new RecaptchaVerifier( getAuth(),'recaptcha-container-id', undefined);Web
var recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container-id');ব্যবহারকারীর জন্য একটি মাল্টি-ফ্যাক্টর সেশন নিন:
Web
import { multiFactor } from "firebase/auth"; multiFactor(user).getSession().then(function (multiFactorSession) { // ... });Web
user.multiFactor.getSession().then(function(multiFactorSession) { // ... })ব্যবহারকারীর ফোন নম্বর এবং মাল্টি-ফ্যাক্টর সেশন দিয়ে একটি
PhoneInfoOptionsঅবজেক্ট ইনিশিয়ালাইজ করুন:Web
// Specify the phone number and pass the MFA session. const phoneInfoOptions = { phoneNumber: phoneNumber, session: multiFactorSession };Web
// Specify the phone number and pass the MFA session. var phoneInfoOptions = { phoneNumber: phoneNumber, session: multiFactorSession };ব্যবহারকারীর ফোনে একটি যাচাইকরণ বার্তা পাঠান:
Web
import { PhoneAuthProvider } from "firebase/auth"; const phoneAuthProvider = new PhoneAuthProvider(auth); phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier) .then(function (verificationId) { // verificationId will be needed to complete enrollment. });Web
var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); // Send SMS verification code. return phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier) .then(function(verificationId) { // verificationId will be needed for enrollment completion. })বাধ্যতামূলক না হলেও, ব্যবহারকারীদের আগে থেকেই জানিয়ে দেওয়া ভালো যে তাঁরা একটি এসএমএস বার্তা পাবেন এবং এক্ষেত্রে সাধারণ চার্জ প্রযোজ্য হবে।
অনুরোধটি ব্যর্থ হলে, reCAPTCHA রিসেট করুন, তারপর পূর্ববর্তী ধাপটি পুনরাবৃত্তি করুন যাতে ব্যবহারকারী আবার চেষ্টা করতে পারেন। মনে রাখবেন যে
verifyPhoneNumber()কোনো ত্রুটি দেখালে স্বয়ংক্রিয়ভাবে reCAPTCHA রিসেট করে দেবে, কারণ reCAPTCHA টোকেনগুলো শুধুমাত্র একবারই ব্যবহার করা যায়।Web
recaptchaVerifier.clear();Web
recaptchaVerifier.clear();এসএমএস কোডটি পাঠানো হয়ে গেলে, ব্যবহারকারীকে কোডটি যাচাই করতে বলুন:
Web
// Ask user for the verification code. Then: const cred = PhoneAuthProvider.credential(verificationId, verificationCode);Web
// Ask user for the verification code. Then: var cred = firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode);PhoneAuthCredentialদিয়ে একটিMultiFactorAssertionঅবজেক্ট ইনিশিয়ালাইজ করুন:Web
import { PhoneMultiFactorGenerator } from "firebase/auth"; const multiFactorAssertion = PhoneMultiFactorGenerator.assertion(cred);Web
var multiFactorAssertion = firebase.auth.PhoneMultiFactorGenerator.assertion(cred);তালিকাভুক্তি সম্পূর্ণ করুন। ঐচ্ছিকভাবে, আপনি দ্বিতীয় ফ্যাক্টরের জন্য একটি ডিসপ্লে নাম নির্দিষ্ট করতে পারেন। একাধিক দ্বিতীয় ফ্যাক্টর থাকা ব্যবহারকারীদের জন্য এটি উপযোগী, কারণ প্রমাণীকরণ প্রক্রিয়ার সময় ফোন নম্বরটি গোপন রাখা হয় (উদাহরণস্বরূপ, +1******1234)।
Web
// Complete enrollment. This will update the underlying tokens // and trigger ID token change listener. multiFactor(user).enroll(multiFactorAssertion, "My personal phone number");Web
// Complete enrollment. This will update the underlying tokens // and trigger ID token change listener. user.multiFactor.enroll(multiFactorAssertion, 'My personal phone number');
নিচের কোডটিতে দ্বিতীয় ফ্যাক্টর নথিভুক্ত করার একটি সম্পূর্ণ উদাহরণ দেখানো হয়েছে:
Web
import {
multiFactor, PhoneAuthProvider, PhoneMultiFactorGenerator,
RecaptchaVerifier, getAuth
} from "firebase/auth";
const recaptchaVerifier = new RecaptchaVerifier(getAuth(),
'recaptcha-container-id', undefined);
multiFactor(user).getSession()
.then(function (multiFactorSession) {
// Specify the phone number and pass the MFA session.
const phoneInfoOptions = {
phoneNumber: phoneNumber,
session: multiFactorSession
};
const phoneAuthProvider = new PhoneAuthProvider(auth);
// Send SMS verification code.
return phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier);
}).then(function (verificationId) {
// Ask user for the verification code. Then:
const cred = PhoneAuthProvider.credential(verificationId, verificationCode);
const multiFactorAssertion = PhoneMultiFactorGenerator.assertion(cred);
// Complete enrollment.
return multiFactor(user).enroll(multiFactorAssertion, mfaDisplayName);
});
Web
var recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container-id');
user.multiFactor.getSession().then(function(multiFactorSession) {
// Specify the phone number and pass the MFA session.
var phoneInfoOptions = {
phoneNumber: phoneNumber,
session: multiFactorSession
};
var phoneAuthProvider = new firebase.auth.PhoneAuthProvider();
// Send SMS verification code.
return phoneAuthProvider.verifyPhoneNumber(
phoneInfoOptions, recaptchaVerifier);
})
.then(function(verificationId) {
// Ask user for the verification code.
var cred = firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode);
var multiFactorAssertion = firebase.auth.PhoneMultiFactorGenerator.assertion(cred);
// Complete enrollment.
return user.multiFactor.enroll(multiFactorAssertion, mfaDisplayName);
});
অভিনন্দন! আপনি সফলভাবে একজন ব্যবহারকারীর জন্য দ্বিতীয় প্রমাণীকরণ ফ্যাক্টরটি নিবন্ধন করেছেন।
দ্বিতীয় ফ্যাক্টর ব্যবহার করে ব্যবহারকারীদের সাইন ইন করানো
দ্বি-স্তরীয় এসএমএস যাচাইকরণের মাধ্যমে একজন ব্যবহারকারীকে সাইন ইন করতে:
ব্যবহারকারীকে তার প্রথম ফ্যাক্টর দিয়ে সাইন ইন করান, তারপর
auth/multi-factor-auth-requiredত্রুটিটি ধরুন। এই ত্রুটিতে একটি রিজলভার, নথিভুক্ত দ্বিতীয় ফ্যাক্টরগুলোর বিষয়ে ইঙ্গিত এবং একটি অন্তর্নিহিত সেশন থাকে, যা প্রমাণ করে যে ব্যবহারকারী প্রথম ফ্যাক্টর দিয়ে সফলভাবে প্রমাণীকৃত হয়েছেন।উদাহরণস্বরূপ, যদি ব্যবহারকারীর প্রথম ধাপটি একটি ইমেল এবং পাসওয়ার্ড হয়:
Web
import { getAuth, signInWithEmailAndPassword, getMultiFactorResolver} from "firebase/auth"; const auth = getAuth(); signInWithEmailAndPassword(auth, email, password) .then(function (userCredential) { // User successfully signed in and is not enrolled with a second factor. }) .catch(function (error) { if (error.code == 'auth/multi-factor-auth-required') { // The user is a multi-factor user. Second factor challenge is required. resolver = getMultiFactorResolver(auth, error); // ... } else if (error.code == 'auth/wrong-password') { // Handle other errors such as wrong password. } });Web
firebase.auth().signInWithEmailAndPassword(email, password) .then(function(userCredential) { // User successfully signed in and is not enrolled with a second factor. }) .catch(function(error) { if (error.code == 'auth/multi-factor-auth-required') { // The user is a multi-factor user. Second factor challenge is required. resolver = error.resolver; // ... } else if (error.code == 'auth/wrong-password') { // Handle other errors such as wrong password. } ... });যদি ব্যবহারকারীর প্রথম ফ্যাক্টরটি OAuth, SAML, বা OIDC-এর মতো কোনো ফেডারেটেড প্রোভাইডার হয়, তাহলে
signInWithPopup()বাsignInWithRedirect()কল করার পর ত্রুটিটি ধরুন।যদি ব্যবহারকারীর একাধিক সেকেন্ডারি ফ্যাক্টর নথিভুক্ত করা থাকে, তাহলে তাদের জিজ্ঞাসা করুন কোনটি ব্যবহার করতে হবে:
Web
// Ask user which second factor to use. // You can get the masked phone number via resolver.hints[selectedIndex].phoneNumber // You can get the display name via resolver.hints[selectedIndex].displayName if (resolver.hints[selectedIndex].factorId === PhoneMultiFactorGenerator.FACTOR_ID) { // User selected a phone second factor. // ... } else if (resolver.hints[selectedIndex].factorId === TotpMultiFactorGenerator.FACTOR_ID) { // User selected a TOTP second factor. // ... } else { // Unsupported second factor. }Web
// Ask user which second factor to use. // You can get the masked phone number via resolver.hints[selectedIndex].phoneNumber // You can get the display name via resolver.hints[selectedIndex].displayName if (resolver.hints[selectedIndex].factorId === firebase.auth.PhoneMultiFactorGenerator.FACTOR_ID) { // User selected a phone second factor. // ... } else if (resolver.hints[selectedIndex].factorId === firebase.auth.TotpMultiFactorGenerator.FACTOR_ID) { // User selected a TOTP second factor. // ... } else { // Unsupported second factor. }পূর্ববর্তী বিভাগে বর্ণিত পদ্ধতি অনুসারে reCAPTCHA ভেরিফায়ারটি চালু করুন। যদি একটি RecaptchaVerifier ইনস্ট্যান্স আগে থেকেই কনফিগার করা থাকে, তাহলে এই ধাপটি এড়িয়ে যান:
Web
import { RecaptchaVerifier, getAuth } from "firebase/auth"; recaptchaVerifier = new RecaptchaVerifier(getAuth(), 'recaptcha-container-id', undefined);Web
var recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container-id');ব্যবহারকারীর ফোন নম্বর এবং মাল্টি-ফ্যাক্টর সেশন দিয়ে একটি
PhoneInfoOptionsঅবজেক্ট ইনিশিয়ালাইজ করুন। এই মানগুলিauth/multi-factor-auth-requiredত্রুটিতে পাস করাresolverঅবজেক্টে থাকে:Web
const phoneInfoOptions = { multiFactorHint: resolver.hints[selectedIndex], session: resolver.session };Web
var phoneInfoOptions = { multiFactorHint: resolver.hints[selectedIndex], session: resolver.session };ব্যবহারকারীর ফোনে একটি যাচাইকরণ বার্তা পাঠান:
Web
// Send SMS verification code. const phoneAuthProvider = new PhoneAuthProvider(auth); phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier) .then(function (verificationId) { // verificationId will be needed for sign-in completion. });Web
var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); // Send SMS verification code. return phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier) .then(function(verificationId) { // verificationId will be needed for sign-in completion. })অনুরোধটি ব্যর্থ হলে, reCAPTCHA রিসেট করুন, তারপর পূর্ববর্তী ধাপটি পুনরাবৃত্তি করুন যাতে ব্যবহারকারী আবার চেষ্টা করতে পারেন:
Web
recaptchaVerifier.clear();Web
recaptchaVerifier.clear();এসএমএস কোডটি পাঠানো হয়ে গেলে, ব্যবহারকারীকে কোডটি যাচাই করতে বলুন:
Web
const cred = PhoneAuthProvider.credential(verificationId, verificationCode);Web
// Ask user for the verification code. Then: var cred = firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode);PhoneAuthCredentialদিয়ে একটিMultiFactorAssertionঅবজেক্ট ইনিশিয়ালাইজ করুন:Web
const multiFactorAssertion = PhoneMultiFactorGenerator.assertion(cred);Web
var multiFactorAssertion = firebase.auth.PhoneMultiFactorGenerator.assertion(cred);দ্বিতীয় প্রমাণীকরণ সম্পন্ন করতে
resolver.resolveSignIn()কল করুন। এরপর আপনি মূল সাইন-ইন ফলাফল অ্যাক্সেস করতে পারবেন, যার মধ্যে স্ট্যান্ডার্ড প্রোভাইডার-নির্দিষ্ট ডেটা এবং প্রমাণীকরণ ক্রেডেনশিয়াল অন্তর্ভুক্ত রয়েছে:Web
// Complete sign-in. This will also trigger the Auth state listeners. resolver.resolveSignIn(multiFactorAssertion) .then(function (userCredential) { // userCredential will also contain the user, additionalUserInfo, optional // credential (null for email/password) associated with the first factor sign-in. // For example, if the user signed in with Google as a first factor, // userCredential.additionalUserInfo will contain data related to Google // provider that the user signed in with. // - user.credential contains the Google OAuth credential. // - user.credential.accessToken contains the Google OAuth access token. // - user.credential.idToken contains the Google OAuth ID token. });Web
// Complete sign-in. This will also trigger the Auth state listeners. resolver.resolveSignIn(multiFactorAssertion) .then(function(userCredential) { // userCredential will also contain the user, additionalUserInfo, optional // credential (null for email/password) associated with the first factor sign-in. // For example, if the user signed in with Google as a first factor, // userCredential.additionalUserInfo will contain data related to Google provider that // the user signed in with. // user.credential contains the Google OAuth credential. // user.credential.accessToken contains the Google OAuth access token. // user.credential.idToken contains the Google OAuth ID token. });
নিচের কোডটিতে একজন মাল্টি-ফ্যাক্টর ব্যবহারকারীকে সাইন ইন করার একটি সম্পূর্ণ উদাহরণ দেখানো হয়েছে:
Web
import {
getAuth,
getMultiFactorResolver,
PhoneAuthProvider,
PhoneMultiFactorGenerator,
RecaptchaVerifier,
signInWithEmailAndPassword
} from "firebase/auth";
const recaptchaVerifier = new RecaptchaVerifier(getAuth(),
'recaptcha-container-id', undefined);
const auth = getAuth();
signInWithEmailAndPassword(auth, email, password)
.then(function (userCredential) {
// User is not enrolled with a second factor and is successfully
// signed in.
// ...
})
.catch(function (error) {
if (error.code == 'auth/multi-factor-auth-required') {
const resolver = getMultiFactorResolver(auth, error);
// Ask user which second factor to use.
if (resolver.hints[selectedIndex].factorId ===
PhoneMultiFactorGenerator.FACTOR_ID) {
const phoneInfoOptions = {
multiFactorHint: resolver.hints[selectedIndex],
session: resolver.session
};
const phoneAuthProvider = new PhoneAuthProvider(auth);
// Send SMS verification code
return phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier)
.then(function (verificationId) {
// Ask user for the SMS verification code. Then:
const cred = PhoneAuthProvider.credential(
verificationId, verificationCode);
const multiFactorAssertion =
PhoneMultiFactorGenerator.assertion(cred);
// Complete sign-in.
return resolver.resolveSignIn(multiFactorAssertion)
})
.then(function (userCredential) {
// User successfully signed in with the second factor phone number.
});
} else if (resolver.hints[selectedIndex].factorId ===
TotpMultiFactorGenerator.FACTOR_ID) {
// Handle TOTP MFA.
// ...
} else {
// Unsupported second factor.
}
} else if (error.code == 'auth/wrong-password') {
// Handle other errors such as wrong password.
}
});
Web
var resolver;
firebase.auth().signInWithEmailAndPassword(email, password)
.then(function(userCredential) {
// User is not enrolled with a second factor and is successfully signed in.
// ...
})
.catch(function(error) {
if (error.code == 'auth/multi-factor-auth-required') {
resolver = error.resolver;
// Ask user which second factor to use.
if (resolver.hints[selectedIndex].factorId ===
firebase.auth.PhoneMultiFactorGenerator.FACTOR_ID) {
var phoneInfoOptions = {
multiFactorHint: resolver.hints[selectedIndex],
session: resolver.session
};
var phoneAuthProvider = new firebase.auth.PhoneAuthProvider();
// Send SMS verification code
return phoneAuthProvider.verifyPhoneNumber(phoneInfoOptions, recaptchaVerifier)
.then(function(verificationId) {
// Ask user for the SMS verification code.
var cred = firebase.auth.PhoneAuthProvider.credential(
verificationId, verificationCode);
var multiFactorAssertion =
firebase.auth.PhoneMultiFactorGenerator.assertion(cred);
// Complete sign-in.
return resolver.resolveSignIn(multiFactorAssertion)
})
.then(function(userCredential) {
// User successfully signed in with the second factor phone number.
});
} else if (resolver.hints[selectedIndex].factorId ===
firebase.auth.TotpMultiFactorGenerator.FACTOR_ID) {
// Handle TOTP MFA.
// ...
} else {
// Unsupported second factor.
}
} else if (error.code == 'auth/wrong-password') {
// Handle other errors such as wrong password.
} ...
});
অভিনন্দন! আপনি মাল্টি-ফ্যাক্টর অথেনটিকেশন ব্যবহার করে সফলভাবে একজন ব্যবহারকারীকে সাইন ইন করিয়েছেন।
এরপর কী?
- Admin SDK ব্যবহার করে প্রোগ্রাম্যাটিকভাবে মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন ।