মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন, মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন

এই ডকুমেন্টটি আপনাকে দেখায় কিভাবে 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 ক্ষেত্রটি সর্বোচ্চ ব্যাচের আকার নির্দিষ্ট করে। ডিফল্ট এবং সর্বোচ্চ মান হল 1000।

ব্যবহারকারী তৈরি করা হচ্ছে

নতুন ব্যবহারকারী তৈরি করতে createUser() কল করুন। সেকেন্ডারি ফ্যাক্টর সহ নতুন ব্যবহারকারীদের একটি যাচাইকৃত ইমেল ঠিকানা থাকতে হবে ( emailVerified true তে সেট করুন) এবং সাইন ইন করার জন্য একটি সমর্থিত প্রথম ফ্যাক্টর ব্যবহার করতে হবে। প্রতি ব্যবহারকারীর জন্য সর্বাধিক ৫টি সেকেন্ডারি ফ্যাক্টর অনুমোদিত।

উদাহরণটি দেখায় কিভাবে 2টি গৌণ বিষয় ব্যবহার করে একটি নতুন ব্যবহারকারী তৈরি করতে হয়:

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);
});