Çok Faktörlü Kullanıcıları Yönetin

Bu belge, çok faktörlü kullanıcılarınızı programlı bir şekilde yönetmek için Firebase Admin SDK'yı nasıl kullanacağınızı gösterir. Çok faktörlü kullanıcıları yönetirken, tek faktörlü kullanıcılara kıyasla daha geniş bir kullanıcı özelliklerine erişebilirsiniz.

Sen başlamadan önce

Node.js Yönetici SDK'sını yükleyin . Diğer Admin SDK dilleri şu anda desteklenmemektedir.

Kullanıcı edinme

UserRecord nesnesinden kayıtlı ikinci faktörlerin listesi gibi kullanıcı çok faktörlü ilgili verileri alabilirsiniz. Bir kullanıcı kaydı almak için getUser() veya getUserByEmail() öğesini çağırın.

Aşağıdaki örnekte çok faktörlü kayıtlı bir kullanıcı gösterilmektedir:

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

Kullanıcıları listeleme

Aşağıdaki kod, tüm kullanıcıların nasıl listeleneceğini ve kayıtlı ikincil bir faktöre sahip olup olmadıklarının nasıl kontrol edileceğini gösterir:

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

Kullanıcılar, uid göre sıralanmış olarak gruplar halinde döndürülür. Her sonuç grubu, bir kullanıcı listesi ve bir sonraki grubu getirmek için kullanılan bir sonraki sayfa belirtecini içerir. Tüm kullanıcılar listelendiğinde pageToken döndürülmez.

maxResult alanı maksimum toplu iş boyutunu belirtir. Varsayılan ve maksimum değer 1000'dir.

Kullanıcı oluşturma

Yeni bir kullanıcı oluşturmak için createUser() öğesini çağırın. İkincil faktörleri olan yeni kullanıcıların doğrulanmış bir e-posta adresine sahip olması ( emailVerified true olarak ayarlaması) ve oturum açmak için desteklenen bir ilk faktör kullanması gerekir. Kullanıcı başına en fazla 5 ikincil faktöre izin verilir.

Örnek, 2 ikincil faktörle yeni bir kullanıcının nasıl oluşturulacağını gösterir:

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

Bir kullanıcıyı güncelleme

Mevcut bir kullanıcıyı güncellemek için updateUser() öğesini çağırın:

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

Yeni bir ikincil faktör ekleme

enrolledFactors listesiyle updateUser() işlevinin çağrılması, kullanıcının mevcut ikincil faktörlerinden herhangi birini silecektir. Mevcut olanları korurken yeni bir ikincil faktör eklemek için önce kullanıcıyı arayın, ardından yeni faktörü listeye ekleyin:

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

İkincil bir faktörün kaldırılması

Bir kullanıcının çok faktörlü kimlik doğrulama kaydını tamamen iptal etmek için, enrolledFactors null veya boş bir diziye ayarlayın:

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