Zarządzanie użytkownikami uwierzytelniania wielopoziomowego

Z tego dokumentu dowiesz się, jak zarządzać Firebase Admin SDK z automatyzacją użytkowników wielopoziomowych. Przy zarządzaniu użytkownikami wielopoziomowymi: masz dostęp do większego zakresu właściwości użytkownika na użytkowników jednopoziomowych.

Zanim zaczniesz

Zainstaluj Admin SDK Node.js. Inne: Admin SDK języki nie są obecnie obsługiwane.

Pozyskiwanie użytkowników

Możesz pobrać dane użytkowników wielopoziomowe, takie jak lista zarejestrowanych użytkowników drugi czynnik z obiektu UserRecord. Aby uzyskać informacje o użytkowniku, wywołaj getUser() lub getUserByEmail().

Oto przykład zarejestrowanego użytkownika uwierzytelniania wielopoziomowego:

// 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',
      },
    ],
  },
};

Użytkownicy wizytówki

Poniższy kod pokazuje, jak wyświetlić listę wszystkich użytkowników i sprawdzać, czy mają zarejestrowany drugi czynnik:

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

Użytkownicy są zwracani w partiach, uporządkowanych według uid. Każda grupa wyników zawiera listę użytkowników oraz token następnej strony, który zostanie użyty do pobrania następnej partii. Gdy wszyscy użytkownicy są widoczni, nie jest zwracany żaden element pageToken.

Pole maxResult określa maksymalny rozmiar partii. Domyślne maksymalna wartość to 1000.

Tworzenie użytkownika

Wywołaj createUser(), aby utworzyć nowego użytkownika. Nowi użytkownicy z czynnikami dodatkowymi muszą mieć zweryfikowany adres e-mail (ustaw emailVerified na true) i używać obsługiwanego pierwszego poziomu uwierzytelniania. Dozwolonych jest maksymalnie 5 czynników dodatkowych użytkownika.

Przykład pokazuje, jak utworzyć nowego użytkownika z 2 czynnikami dodatkowymi:

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

Aktualizowanie użytkownika

Aby zaktualizować istniejącego użytkownika, zadzwoń pod numer 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);
});

Dodawanie nowego czynnika dodatkowego

Wywołanie updateUser() z listą enrolledFactors spowoduje usunięcie wszystkich czynników dodatkowych użytkownika. Aby dodać nowy czynnik dodatkowy, zachowując istniejące, najpierw wyszukaj użytkownika, a potem dodaj nowy czynnik do listy:

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

Usuwanie czynnika dodatkowego

Aby całkowicie wyrejestrować użytkownika z uwierzytelniania wielopoziomowego, ustaw Z enrolledFactors do null lub pustej tablicy:

admin.auth().updateUser(uid: '123456789', {
  multiFactor: {
    enrolledFactors: null,
  },
})
.then((userRecord) => {
  console.log(userRecord.multiFactor);
})
.catch((error) => {
  console.log(error);
});