In diesem Dokument erfahren Sie, wie Sie mit dem Firebase Admin SDK Ihre Multi-Faktor-Authentifizierung programmieren können. Bei der Verwaltung von Multi-Faktor-Authentifizierung stehen Ihnen mehr Nutzereigenschaften zur Verfügung als Nutzer mit der Ein-Faktor-Authentifizierung.
Hinweis
Installieren Sie die Node.js-Admin SDK. Sonstige 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);
});