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

इस दस्तावेज़ में, प्रोग्राम के ज़रिए कई चरणों में पुष्टि की सुविधा का इस्तेमाल करने वाले उपयोगकर्ताओं को मैनेज करने के लिए, 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 फ़ील्ड में, बैच के ज़्यादा से ज़्यादा साइज़ की जानकारी दी जाती है. डिफ़ॉल्ट और ज़्यादा से ज़्यादा वैल्यू 1,000 है.

उपयोगकर्ता बनाना

नया उपयोगकर्ता बनाने के लिए, 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);
});