Çok Öğeli Kullanıcıları Yönetme

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

Başlamadan önce

Node.js Admin SDK sürümünü yükleyin. Diğer Admin SDK diller şu anda desteklenmemektedir.

Kullanıcı edinme

UserRecord nesnesinden, kullanıcının çok faktörlü kimlik doğrulamayla ilgili verilerini (ör. kayıtlı ikinci faktörlerin listesi) alabilirsiniz. Kullanıcı kaydı almak için getUser() veya getUserByEmail() numaralı telefonu arayın.

Aşağıdaki örnekte, çok öğeli olarak 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 kodda, tüm kullanıcıların nasıl listeleneceği ve ikincil faktöre kaydolup kaydolmadıkları nasıl kontrol edileceği gösterilmektedir:

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 değerlerine göre sıralanarak gruplar halinde döndürülür. Her sonuç grubu, kullanıcıların listesini ve bir sonraki grubu getirmek için kullanılan bir sonraki sayfa jetonunu içerir. Tüm kullanıcılar listelendiğinde pageToken döndürülmez.

maxResult alanı, maksimum toplu işlem boyutunu belirtir. Varsayılan ve maksimum değer 1.000'dür.

Kullanıcı oluşturma

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

Örnekte, 2 ikincil faktör içeren yeni bir kullanıcının nasıl oluşturulacağı gösterilmektedir:

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

Kullanıcıyı güncelleme

Mevcut bir kullanıcıyı güncellemek için updateUser() işlevini ç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 listesi ile updateUser() çağrısı yapıldığında kullanıcının mevcut ikincil faktörleri silinir. Mevcut faktörleri 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ü kaldırma

Bir kullanıcının çok öğeli kimlik doğrulamasından kaydını tamamen kaldırmak için enrolledFactors değerini null veya boş bir dizi olarak ayarlayın:

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