Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

बहु-कारक उपयोगकर्ताओं को प्रबंधित करें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

यह दस्तावेज़ आपको दिखाता है कि अपने बहु-कारक उपयोगकर्ताओं को प्रोग्रामेटिक रूप से प्रबंधित करने के लिए Firebase Admin SDK का उपयोग कैसे करें। बहु-कारक उपयोगकर्ताओं का प्रबंधन करते समय, आपके पास एकल-कारक उपयोगकर्ताओं की तुलना में उपयोगकर्ता संपत्तियों की बढ़ी हुई श्रेणी तक पहुंच होती है।

शुरू करने से पहले

Node.js व्यवस्थापक SDK स्थापित करें । अन्य व्यवस्थापक 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 पर सेट करें) और साइन इन करने के लिए समर्थित पहले कारक का उपयोग करें। प्रति उपयोगकर्ता अधिकतम 5 द्वितीयक कारकों की अनुमति 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('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);
});