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

Bu belgede, çok öğeli kullanıcılarınızı programatik olarak yönetmek için Firebase Admin SDK'nın nasıl kullanılacağı gösterilmektedir. Çok öğeli kullanıcıları yönetirken tek faktörlü kullanıcılara kıyasla daha geniş bir kullanıcı özelliği yelpazesine erişebilirsiniz.

Başlamadan önce

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

Kullanıcı edinme

Kullanıcılarla ilgili çok öğelileri (ör. kayıtlı ikinci faktörler listesi) UserRecord nesnesinden 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 kayıtlı ikincil faktör olup olmadığını 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 metriğine göre sıralanmış gruplar halinde döndürülür. Her sonuç grubunda, kullanıcıların listesi ve bir sonraki grubu getirmek için kullanılan sonraki sayfa jetonu bulunur. Tüm kullanıcılar listelendiğinde pageToken döndürülmez.

maxResult alanı, maksimum grup boyutunu belirtir. Varsayılan ve maksimum değer 1000'dir.

Kullanıcı oluşturma

Yeni bir kullanıcı oluşturmak için createUser() numaralı telefonu arayın. İkincil faktörlere sahip yeni kullanıcıların doğrulanmış bir e-posta adresi olması (emailVerified olarak true) 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.

Bu örnekte, 2 ikincil faktöre sahip 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);
});

Bir kullanıcıyı güncelleme

Mevcut bir kullanıcıyı güncellemek için updateUser() numaralı telefonu arayı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ıldığında kullanıcının mevcut ikincil faktörleri silinir. 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 faktörü kaldırma

Bir kullanıcının çok öğeli kimlik doğrulamasındaki kaydını tamamen iptal etmek 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);
});