Bu belgede, çok faktörlü kullanıcılarınızı programlı olarak yönetmek için Firebase Authentication 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'yi yükleyin Admin SDK. Diğer Admin SDK diller şu anda desteklenmemektedir.
Kullanıcı edinme
Kayıtlı ikinci faktörlerin listesi gibi kullanıcı çok faktörlü kimlik doğrulama ile ilgili verileri UserRecord nesnesinden alabilirsiniz. Kullanıcı kaydı almak için getUser() veya getUserByEmail() işlevini çağırın.
Aşağıdaki örnekte, çok faktörlü kimlik doğrulama kaydı yapılmış 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ı listeleme ve ikincil faktör kaydının olup olmadığını kontrol etme işleminin nasıl yapılacağını 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 değerlerine göre sıralanmış gruplar halinde döndürülür. Her sonuç grubu, kullanıcıların listesini ve 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 grup boyutunu belirtir. Varsayılan ve maksimum değer 1.000'dir.
Kullanıcı oluşturma
Yeni bir kullanıcı oluşturmak için createUser() işlevini çağırın. İkincil etmenleri olan yeni kullanıcıların, oturum açmak için doğrulanmış bir e-posta adresine (emailVerified ayarını true olarak belirleyin) ve desteklenen bir birinci etmene sahip olması gerekir. Kullanıcı başına en fazla 5 ikincil faktöre izin verilir.
Bu örnekte, 2 ikincil faktörle 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ı 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 listesiyle updateUser() işlevini çağırmak,
kullanıcının mevcut ikincil faktörlerini siler. Mevcut ikincil faktörleri koruyarak 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ı kaydını tamamen silmek 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);
});