ניהול משתמשים מרובי גורמים

מסמך זה מראה לך כיצד להשתמש ב-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 ) ולהשתמש בגורם ראשון נתמך כדי להיכנס. מותרים עד 5 גורמים משניים לכל משתמש.

הדוגמה מראה כיצד ליצור משתמש חדש עם 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);
});

הוספת גורם משני חדש

קריאה ל- updateUser() עם רשימה של enrolledFactors תמחק כל אחד מהגורמים המשניים הנוכחיים של המשתמש. כדי להוסיף גורם משני חדש תוך שמירה על הקיים, חפש תחילה את המשתמש ולאחר מכן הוסף את הגורם החדש לרשימה:

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