এই ডকুমেন্টটি আপনাকে দেখাবে কিভাবে Firebase Admin SDK ব্যবহার করে প্রোগ্রাম্যাটিকভাবে আপনার মাল্টি-ফ্যাক্টর ইউজারদের পরিচালনা করতে হয়। মাল্টি-ফ্যাক্টর ইউজারদের পরিচালনা করার সময়, সিঙ্গেল-ফ্যাক্টর ইউজারদের তুলনায় আপনি আরও বেশি সংখ্যক ইউজার প্রপার্টি অ্যাক্সেস করতে পারেন।
শুরু করার আগে
Node.js Admin SDK ইনস্টল করুন । অন্যান্য Admin SDK ভাষাগুলো বর্তমানে সমর্থিত নয়।
ব্যবহারকারী পাওয়া
আপনি UserRecord অবজেক্ট থেকে ব্যবহারকারীর মাল্টি-ফ্যাক্টর সম্পর্কিত ডেটা, যেমন নথিভুক্ত দ্বিতীয় ফ্যাক্টরগুলির তালিকা, পুনরুদ্ধার করতে পারেন। ব্যবহারকারীর রেকর্ড পেতে, getUser() বা getUserByEmail() কল করুন।
নীচের উদাহরণটি একজন মাল্টি-ফ্যাক্টর অথেন্টিকেশন প্রাপ্ত ব্যবহারকারীকে দেখাচ্ছে:
// console.log(userRecord.toJSON());
{
uid: 'some-uid',
displayName: 'John Doe',
email: 'johndoe@gmail.com',
photoURL: 'http://www.example.com/12345678/photo.png',
emailVerified: true,
phoneNumber: '+11234567890',
// Set this user as admin.
customClaims: {admin: true},
// User with Google provider.
providerData: [{
uid: 'google-uid',
email: 'johndoe@gmail.com',
displayName: 'John Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
providerId: 'google.com'
}],
multiFactor: {
enrolledFactors: [
// 2FA with SMS as 2nd factor.
{
uid: '53HG4HG45HG8G04GJ40J4G3J',
phoneNumber: '+16505551234',
displayName: 'Work phone',
enrollmentTime: 'Fri, 22 Sep 2017 01:49:58 GMT',
factorId: 'phone',
},
],
},
};
তালিকাভুক্ত ব্যবহারকারী
নিচের কোডটিতে দেখানো হয়েছে কীভাবে সমস্ত ব্যবহারকারীর তালিকা তৈরি করতে হয় এবং তাদের কোনো সেকেন্ডারি ফ্যাক্টর নথিভুক্ত আছে কিনা তা পরীক্ষা করতে হয়:
admin.auth().listUsers(1000, nextPageToken)
.then((listUsersResult) => {
listUsersResult.users.forEach((userRecord) => {
// Multi-factor enrolled users second factors can be retrieved via:
if (userRecord.multiFactor) {
userRecord.multiFactor.enrolledFactors.forEach((enrolledFactor) => {
console.log(userRecord.uid, enrolledFactor.toJSON());
});
}
});
})
.catch((error) => {
console.log('Error listing users:', error);
});
ব্যবহারকারীদের তাদের uid অনুসারে সাজিয়ে ব্যাচ আকারে ফেরত দেওয়া হয়। ফলাফলের প্রতিটি ব্যাচে ব্যবহারকারীদের একটি তালিকা এবং পরবর্তী ব্যাচ আনার জন্য ব্যবহৃত একটি 'নেক্সট পেজ টোকেন' থাকে। যখন সমস্ত ব্যবহারকারীর তালিকা করা হয়ে যায়, তখন আর কোনো pageToken ফেরত দেওয়া হয় না।
maxResult ফিল্ডটি সর্বোচ্চ ব্যাচ সাইজ নির্দিষ্ট করে। এর ডিফল্ট এবং সর্বোচ্চ মান হলো ১০০০।
একজন ব্যবহারকারী তৈরি করা
নতুন ব্যবহারকারী তৈরি করতে createUser() কল করুন। সেকেন্ডারি ফ্যাক্টর সহ নতুন ব্যবহারকারীদের অবশ্যই একটি যাচাইকৃত ইমেল ঠিকানা থাকতে হবে ( emailVerified কে true সেট করুন) এবং সাইন ইন করার জন্য একটি সমর্থিত ফার্স্ট ফ্যাক্টর ব্যবহার করতে হবে। প্রতি ব্যবহারকারীর জন্য সর্বোচ্চ ৫টি সেকেন্ডারি ফ্যাক্টর অনুমোদিত।
এই উদাহরণে দেখানো হয়েছে কীভাবে ২টি সেকেন্ডারি ফ্যাক্টর সহ একজন নতুন ইউজার তৈরি করতে হয়:
admin.auth().createUser({
uid: '123456789',
email: 'user@example.com',
emailVerified: true,
password: 'password',
multiFactor: {
enrolledFactors: [
// When creating users with phone second factors, the uid and
// enrollmentTime should not be specified. These will be provisioned by
// the Auth server.
// Primary second factor.
{
phoneNumber: '+16505550001',
displayName: 'Corp phone',
factorId: 'phone',
},
// Backup second factor.
{
phoneNumber: '+16505550002',
displayName: 'Personal phone',
factorId: 'phone'
},
],
},
})
.then((userRecord) => {
console.log(userRecord.multiFactor.enrolledFactors);
})
.catch((error) => {
console.log(error);
});
একজন ব্যবহারকারীকে আপডেট করা হচ্ছে
বিদ্যমান ব্যবহারকারীকে আপডেট করতে, updateUser() কল করুন:
admin.auth().updateUser(uid: '123456789', {
multiFactor: {
enrolledFactors: [
{
// uid will be auto-generated.
phoneNumber: '+16505550003',
displayName: 'Spouse\'s phone',
factorId: 'phone',
},
{
// uid can also be specified. This is useful if a new second factor is added and an
// existing enrolled second factor is kept unmodified.
uid: 'existing-enrolled-mfa-uid',
phoneNumber: '+16505550004',
displayName: 'Personal phone',
factorId: 'phone',
},
{
phoneNumber: '+16505550005',
displayName: 'Backup phone',
factorId: 'phone',
// Enrollment time can also be explicitly specified.
enrollmentTime: new Date().toUTCString(),
},
],
},
})
.then((userRecord) => {
console.log(userRecord.multiFactor.enrolledFactors);
})
.catch((error) => {
console.log(error);
});
একটি নতুন গৌণ ফ্যাক্টর যোগ করা
enrolledFactors এর একটি তালিকা দিয়ে updateUser() কল করলে ব্যবহারকারীর বর্তমান যেকোনো সেকেন্ডারি ফ্যাক্টর মুছে যাবে। বিদ্যমান ফ্যাক্টরগুলো অক্ষুণ্ণ রেখে একটি নতুন সেকেন্ডারি ফ্যাক্টর যোগ করতে, প্রথমে ব্যবহারকারীকে খুঁজে বের করুন, তারপর নতুন ফ্যাক্টরটি তালিকায় যোগ করুন:
function enrollSecondFactor(userId, secondFactorPhoneNumber, secondFactorDisplayName) {
return admin.auth().getUser(userId)
.then((userRecord) => {
const updatedList = (userRecord.multiFactor &&
userRecord.multiFactor.toJSON().enrolledFactors) || [];
updatedList.push({
phoneNumber: secondFactorPhoneNumber,
displayName: secondFactorDisplayName,
factorId: 'phone',
});
return admin.auth().updateUser(userRecord.uid, {
multiFactor: {
enrolledFactors: updatedList,
},
});
})
.catch((error) => {
console.log(error);
});
}
একটি গৌণ কারণ অপসারণ করা
মাল্টি-ফ্যাক্টর অথেনটিকেশন থেকে কোনো ব্যবহারকারীকে সম্পূর্ণরূপে তালিকাচ্যুত করতে, enrolledFactors null বা একটি খালি অ্যারেতে সেট করুন:
admin.auth().updateUser(uid: '123456789', {
multiFactor: {
enrolledFactors: null,
},
})
.then((userRecord) => {
console.log(userRecord.multiFactor);
})
.catch((error) => {
console.log(error);
});