In diesem Dokument wird gezeigt, wie Sie mit dem Firebase Admin SDK Ihre Multi-Faktor-Nutzer programmatisch verwalten. Wenn Sie Multi-Faktor-Nutzer verwalten, haben Sie Zugriff auf eine größere Anzahl von Nutzerattributen im Vergleich zu Single-Faktor-Nutzern.
Hinweis
Installieren Sie die Node.js-Admin SDK. Andere Admin SDK-Sprachen werden derzeit nicht unterstützt.
Nutzer abrufen
Sie können multifaktorbezogene Daten für Nutzer aus dem UserRecord
-Objekt abrufen, z. B. eine Liste angemeldeter zweiter Faktoren. Rufen Sie getUser()
oder getUserByEmail()
auf, um einen Nutzerdatensatz abzurufen.
Das folgende Beispiel zeigt einen Nutzer, der über die Multi-Faktor-Authentifizierung angemeldet ist:
// 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',
},
],
},
};
Nutzer auflisten
Der folgende Code zeigt, wie Sie alle Nutzer auflisten und prüfen können, ob sie einen sekundären Faktor registriert haben:
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);
});
Die Nutzer werden in Batches nach uid
sortiert. Jeder Batch von Ergebnissen enthält eine Liste von Nutzern sowie ein Token für die nächste Seite zum Abrufen des nächsten Batches.
Wenn alle Nutzer aufgelistet wurden, wird kein pageToken
zurückgegeben.
Das Feld maxResult
gibt die maximale Stapelgröße an. Der Standard- und der Höchstwert sind 1.000.
Nutzer erstellen
Rufen Sie createUser()
auf, um einen neuen Nutzer zu erstellen. Neue Nutzer mit sekundären Faktoren müssen eine bestätigte E-Mail-Adresse haben (emailVerified
auf true
festlegen) und einen unterstützten ersten Faktor für die Anmeldung verwenden. Pro Nutzer sind maximal fünf sekundäre Faktoren zulässig.
Das Beispiel zeigt, wie ein neuer Nutzer mit zwei sekundären Faktoren erstellt wird:
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);
});
Nutzer aktualisieren
Rufen Sie updateUser()
auf, um einen vorhandenen Nutzer zu aktualisieren:
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);
});
Neuen sekundären Faktor hinzufügen
Wenn Sie updateUser()
mit einer Liste von enrolledFactors
aufrufen, werden alle aktuellen sekundären Faktoren des Nutzers gelöscht. Wenn Sie einen neuen sekundären Faktor hinzufügen möchten, während Sie die vorhandenen beibehalten möchten, suchen Sie zuerst den Nutzer und fügen Sie den neuen Faktor in die Liste ein:
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);
});
}
Sekundären Faktor entfernen
Setzen Sie enrolledFactors
auf null
oder ein leeres Array, um einen Nutzer vollständig aus der Multi-Faktor-Authentifizierung abzumelden:
admin.auth().updateUser(uid: '123456789', {
multiFactor: {
enrolledFactors: null,
},
})
.then((userRecord) => {
console.log(userRecord.multiFactor);
})
.catch((error) => {
console.log(error);
});