Firebase Admin SDK มี API สำหรับจัดการผู้ใช้ Firebase Authentication ของคุณด้วยสิทธิ์ระดับสูง API การจัดการผู้ใช้ของผู้ดูแลระบบช่วยให้คุณสามารถทำงานต่อไปนี้โดยทางโปรแกรมจากสภาพแวดล้อมเซิร์ฟเวอร์ที่ปลอดภัย:
- สร้างผู้ใช้ใหม่โดยไม่มีการควบคุมปริมาณหรือการจำกัดอัตราใดๆ
- ค้นหาผู้ใช้ตามเกณฑ์ต่างๆ เช่น uid อีเมล หรือหมายเลขโทรศัพท์
- แสดงรายการผู้ใช้ทั้งหมดของโปรเจ็กต์ที่ระบุเป็นชุด
- เข้าถึงข้อมูลเมตาของผู้ใช้ รวมถึงวันที่สร้างบัญชีและวันที่ลงชื่อเข้าใช้ครั้งล่าสุด
- ลบผู้ใช้โดยไม่ต้องใช้รหัสผ่านที่มีอยู่
- อัปเดตคุณสมบัติผู้ใช้ รวมถึงรหัสผ่าน โดยไม่ต้องลงชื่อเข้าใช้ในฐานะผู้ใช้
- ยืนยันอีเมลโดยไม่ต้องผ่านขั้นตอนการดำเนินการนอกกลุ่มเพื่อยืนยันอีเมล
- เปลี่ยนอีเมลของผู้ใช้โดยไม่ต้องส่งลิงก์อีเมลเพื่อเพิกถอนการเปลี่ยนแปลงเหล่านี้
- สร้างผู้ใช้ใหม่ด้วยหมายเลขโทรศัพท์โดยไม่ต้องผ่านขั้นตอนการยืนยันทาง SMS
- เปลี่ยนหมายเลขโทรศัพท์ของผู้ใช้โดยไม่ต้องผ่านขั้นตอนการยืนยันทาง SMS
- การจัดสรรผู้ใช้แบบออฟไลน์ในสถานะปิดใช้งาน และควบคุมในภายหลังว่าจะเปิดใช้งานเมื่อใด
- สร้างคอนโซลผู้ใช้แบบกำหนดเองที่ปรับแต่งให้เหมาะกับระบบการจัดการผู้ใช้ของแอปพลิเคชันเฉพาะ
ก่อนที่คุณจะเริ่ม
หากต้องการใช้ API การจัดการผู้ใช้ที่ได้รับจาก Firebase Admin SDK คุณต้องมีบัญชีบริการ ทำตาม คำแนะนำการตั้งค่า เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้น Admin SDK
ดึงข้อมูลผู้ใช้
วิธีหลักในการระบุผู้ใช้คือโดยใช้ uid
ซึ่งเป็นตัวระบุเฉพาะสำหรับผู้ใช้นั้น Admin SDK มีวิธีการที่อนุญาตให้ดึงข้อมูลโปรไฟล์ของผู้ใช้โดย uid
:
โหนด js
getAuth()
.getUser(uid)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
ชวา
UserRecord userRecord = FirebaseAuth.getInstance().getUser(uid);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getUid());
หลาม
from firebase_admin import auth
user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))
ไป
// Get an auth client from the firebase.App
client, err := app.Auth(ctx)
if err != nil {
log.Fatalf("error getting Auth client: %v\n", err)
}
u, err := client.GetUser(ctx, uid)
if err != nil {
log.Fatalf("error getting user %s: %v\n", uid, err)
}
log.Printf("Successfully fetched user data: %v\n", u)
ค#
UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
วิธีการนี้ส่งคืนวัตถุ UserRecord
สำหรับผู้ใช้ที่สอดคล้องกับ uid
ที่ให้ไว้กับวิธีการ
หาก uid
ที่ระบุไม่ได้เป็นของผู้ใช้ที่มีอยู่หรือไม่สามารถดึงข้อมูลผู้ใช้ได้ด้วยเหตุผลอื่นใด วิธีการข้างต้นจะแสดงข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดู ข้อผิดพลาด Admin Auth API
ในบางกรณี คุณจะมีอีเมลของผู้ใช้แทน uid
Firebase Admin SDK รองรับการค้นหาข้อมูลผู้ใช้ด้วยอีเมล:
โหนด js
getAuth()
.getUserByEmail(email)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
ชวา
UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getEmail());
หลาม
from firebase_admin import auth
user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))
ไป
u, err := client.GetUserByEmail(ctx, email)
if err != nil {
log.Fatalf("error getting user by email %s: %v\n", email, err)
}
log.Printf("Successfully fetched user data: %v\n", u)
ค#
UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
เมธอดนี้ส่งคืนออบเจ็กต์ UserRecord
สำหรับผู้ใช้ที่สอดคล้องกับอีเมลที่ให้ไว้
หากอีเมลที่ระบุไม่ได้เป็นของผู้ใช้ที่มีอยู่หรือไม่สามารถดึงข้อมูลผู้ใช้ได้ด้วยเหตุผลอื่นใด Admin SDK จะแสดงข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
ในกรณีอื่นๆ คุณจะมีหมายเลขโทรศัพท์ของผู้ใช้แทน uid
Firebase Admin SDK รองรับการค้นหาข้อมูลผู้ใช้ด้วยหมายเลขโทรศัพท์:
โหนด js
getAuth()
.getUserByPhoneNumber(phoneNumber)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
ชวา
UserRecord userRecord = FirebaseAuth.getInstance().getUserByPhoneNumber(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getPhoneNumber());
หลาม
from firebase_admin import auth
user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))
ไป
u, err := client.GetUserByPhoneNumber(ctx, phone)
if err != nil {
log.Fatalf("error getting user by phone %s: %v\n", phone, err)
}
log.Printf("Successfully fetched user data: %v\n", u)
ค#
UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByPhoneNumberAsync(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
วิธีการนี้ส่งคืนออบเจ็กต์ UserRecord
สำหรับผู้ใช้ที่สอดคล้องกับหมายเลขโทรศัพท์ที่ให้ไว้
หากหมายเลขโทรศัพท์ที่ระบุไม่ได้เป็นของผู้ใช้ที่มีอยู่หรือไม่สามารถดึงข้อมูลผู้ใช้ได้ด้วยเหตุผลอื่นใด Admin SDK จะแสดงข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
ดึงข้อมูลผู้ใช้จำนวนมาก
Firebase Admin SDK ยังอนุญาตให้เรียกข้อมูลรายชื่อผู้ใช้ตามตัวระบุที่คุณระบุ คุณสามารถระบุผู้ใช้ด้วย ID ผู้ใช้ อีเมล หรือหมายเลขโทรศัพท์ สามารถระบุตัวระบุได้สูงสุด 100 ตัวในการเรียกครั้งเดียว ตัวระบุอาจมีประเภทผสมกัน:
โหนด js
getAuth()
.getUsers([
{ uid: 'uid1' },
{ email: 'user2@example.com' },
{ phoneNumber: '+15555550003' },
{ providerId: 'google.com', providerUid: 'google_uid4' },
])
.then((getUsersResult) => {
console.log('Successfully fetched user data:');
getUsersResult.users.forEach((userRecord) => {
console.log(userRecord);
});
console.log('Unable to find users corresponding to these identifiers:');
getUsersResult.notFound.forEach((userIdentifier) => {
console.log(userIdentifier);
});
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
ชวา
GetUsersResult result = FirebaseAuth.getInstance().getUsersAsync(Arrays.asList(
new UidIdentifier("uid1"),
new EmailIdentifier("user2@example.com"),
new PhoneIdentifier("+15555550003"),
new ProviderIdentifier("google.com", "google_uid4"))).get();
System.out.println("Successfully fetched user data:");
for (UserRecord user : result.getUsers()) {
System.out.println(user.getUid());
}
System.out.println("Unable to find users corresponding to these identifiers:");
for (UserIdentifier uid : result.getNotFound()) {
System.out.println(uid);
}
หลาม
from firebase_admin import auth
result = auth.get_users([
auth.UidIdentifier('uid1'),
auth.EmailIdentifier('user2@example.com'),
auth.PhoneIdentifier(+15555550003),
auth.ProviderIdentifier('google.com', 'google_uid4')
])
print('Successfully fetched user data:')
for user in result.users:
print(user.uid)
print('Unable to find users corresponding to these identifiers:')
for uid in result.not_found:
print(uid)
ไป
getUsersResult, err := client.GetUsers(ctx, []auth.UserIdentifier{
auth.UIDIdentifier{UID: "uid1"},
auth.EmailIdentifier{Email: "user@example.com"},
auth.PhoneIdentifier{PhoneNumber: "+15555551234"},
auth.ProviderIdentifier{ProviderID: "google.com", ProviderUID: "google_uid1"},
})
if err != nil {
log.Fatalf("error retriving multiple users: %v\n", err)
}
log.Printf("Successfully fetched user data:")
for _, u := range getUsersResult.Users {
log.Printf("%v", u)
}
log.Printf("Unable to find users corresponding to these identifiers:")
for _, id := range getUsersResult.NotFound {
log.Printf("%v", id)
}
ค#
GetUsersResult result = await FirebaseAuth.DefaultInstance.GetUsersAsync(
new List<UserIdentifier>
{
new UidIdentifier("uid1"),
new EmailIdentifier("user2@example.com"),
new PhoneIdentifier("+15555550003"),
new ProviderIdentifier("google.com", "google_uid4"),
});
Console.WriteLine("Successfully fetched user data:");
foreach (UserRecord user in result.Users)
{
Console.WriteLine($"User: {user.Uid}");
}
Console.WriteLine("Unable to find users corresponding to these identifiers:");
foreach (UserIdentifier uid in result.NotFound)
{
Console.WriteLine($"{uid}");
}
เมธอดนี้จะส่งคืนรายการที่มีขนาดเท่ากับรายการอินพุต โดยแต่ละรายการจะมี UserRecord
ที่เกี่ยวข้องหรือมีข้อผิดพลาดที่ระบุว่าเหตุใดจึงไม่สามารถค้นหาตัวระบุนั้นได้ สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
สร้างผู้ใช้
Admin SDK มีวิธีการที่ช่วยให้คุณสร้างผู้ใช้ Firebase Authentication ใหม่ได้ วิธีนี้ยอมรับออบเจ็กต์ที่มีข้อมูลโปรไฟล์เพื่อรวมไว้ในบัญชีผู้ใช้ที่สร้างขึ้นใหม่:
โหนด js
getAuth()
.createUser({
email: 'user@example.com',
emailVerified: false,
phoneNumber: '+11234567890',
password: 'secretPassword',
displayName: 'John Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
disabled: false,
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
})
.catch((error) => {
console.log('Error creating new user:', error);
});
ชวา
CreateRequest request = new CreateRequest()
.setEmail("user@example.com")
.setEmailVerified(false)
.setPassword("secretPassword")
.setPhoneNumber("+11234567890")
.setDisplayName("John Doe")
.setPhotoUrl("http://www.example.com/12345678/photo.png")
.setDisabled(false);
UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());
หลาม
user = auth.create_user(
email='user@example.com',
email_verified=False,
phone_number='+15555550100',
password='secretPassword',
display_name='John Doe',
photo_url='http://www.example.com/12345678/photo.png',
disabled=False)
print('Sucessfully created new user: {0}'.format(user.uid))
ไป
params := (&auth.UserToCreate{}).
Email("user@example.com").
EmailVerified(false).
PhoneNumber("+15555550100").
Password("secretPassword").
DisplayName("John Doe").
PhotoURL("http://www.example.com/12345678/photo.png").
Disabled(false)
u, err := client.CreateUser(ctx, params)
if err != nil {
log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)
ค#
UserRecordArgs args = new UserRecordArgs()
{
Email = "user@example.com",
EmailVerified = false,
PhoneNumber = "+11234567890",
Password = "secretPassword",
DisplayName = "John Doe",
PhotoUrl = "http://www.example.com/12345678/photo.png",
Disabled = false,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");
ตามค่าเริ่มต้น การตรวจสอบสิทธิ์ Firebase จะสร้าง uid
แบบสุ่มสำหรับผู้ใช้ใหม่ หากคุณต้องการระบุ uid
ของคุณเองสำหรับผู้ใช้ใหม่แทน คุณสามารถรวมไว้เป็นอาร์กิวเมนต์ที่ส่งไปยังวิธีการสร้างผู้ใช้ได้:
โหนด js
getAuth()
.createUser({
uid: 'some-uid',
email: 'user@example.com',
phoneNumber: '+11234567890',
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
})
.catch((error) => {
console.log('Error creating new user:', error);
});
ชวา
CreateRequest request = new CreateRequest()
.setUid("some-uid")
.setEmail("user@example.com")
.setPhoneNumber("+11234567890");
UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());
หลาม
user = auth.create_user(
uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))
ไป
params := (&auth.UserToCreate{}).
UID(uid).
Email("user@example.com").
PhoneNumber("+15555550100")
u, err := client.CreateUser(ctx, params)
if err != nil {
log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)
ค#
UserRecordArgs args = new UserRecordArgs()
{
Uid = "some-uid",
Email = "user@example.com",
PhoneNumber = "+11234567890",
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");
สามารถระบุคุณสมบัติต่างๆ ต่อไปนี้รวมกันได้:
ตารางที่ 1. คุณสมบัติที่ได้รับการสนับสนุนโดยการดำเนินการสร้างผู้ใช้
คุณสมบัติ | พิมพ์ | คำอธิบาย |
---|---|---|
uid | เชือก | uid ที่จะกำหนดให้กับผู้ใช้ที่สร้างขึ้นใหม่ ต้องเป็นสตริงที่มีความยาวระหว่าง 1-128 อักขระ หากไม่ได้ระบุ uid แบบสุ่มจะถูกสร้างขึ้นโดยอัตโนมัติ uid ที่สั้นกว่าให้ประสิทธิภาพที่ดีกว่า |
email | เชือก | อีเมลหลักของผู้ใช้ จะต้องเป็นที่อยู่อีเมลที่ถูกต้อง. |
emailVerified | บูลีน | อีเมลหลักของผู้ใช้จะได้รับการยืนยันหรือไม่ หากไม่ได้ระบุไว้ ค่าเริ่มต้นจะเป็น false |
phoneNumber | เชือก | หมายเลขโทรศัพท์หลักของผู้ใช้ ต้องเป็นหมายเลขโทรศัพท์ที่ถูกต้องตามข้อกำหนด E.164 |
password | เชือก | รหัสผ่านดิบและไม่ได้แฮชของผู้ใช้ ต้องมีความยาวอย่างน้อยหกอักขระ |
displayName | เชือก | ชื่อที่แสดงของผู้ใช้ |
photoURL | เชือก | URL รูปภาพของผู้ใช้ |
disabled | บูลีน | ไม่ว่าผู้ใช้จะถูกปิดการใช้งานหรือไม่ก็ตาม true สำหรับคนพิการ false สำหรับการเปิดใช้งาน หากไม่ได้ระบุไว้ ค่าเริ่มต้นจะเป็น false |
วิธีการสร้างผู้ใช้ส่งคืนออบเจ็กต์ UserRecord
สำหรับผู้ใช้ที่สร้างขึ้นใหม่
หากผู้ใช้ที่มีอยู่ใช้ uid
อีเมลหรือหมายเลขโทรศัพท์ที่ให้ไว้แล้ว หรือไม่สามารถสร้างผู้ใช้ได้ด้วยเหตุผลอื่นใด วิธีการข้างต้นจะล้มเหลวโดยมีข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
อัปเดตผู้ใช้
Firebase Admin SDK ช่วยให้แก้ไขข้อมูลผู้ใช้ที่มีอยู่ได้ง่ายขึ้น คุณต้องระบุ uid
พร้อมกับคุณสมบัติที่จะอัปเดตสำหรับผู้ใช้นั้น:
โหนด js
getAuth()
.updateUser(uid, {
email: 'modifiedUser@example.com',
phoneNumber: '+11234567890',
emailVerified: true,
password: 'newPassword',
displayName: 'Jane Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
disabled: true,
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully updated user', userRecord.toJSON());
})
.catch((error) => {
console.log('Error updating user:', error);
});
ชวา
UpdateRequest request = new UpdateRequest(uid)
.setEmail("user@example.com")
.setPhoneNumber("+11234567890")
.setEmailVerified(true)
.setPassword("newPassword")
.setDisplayName("Jane Doe")
.setPhotoUrl("http://www.example.com/12345678/photo.png")
.setDisabled(true);
UserRecord userRecord = FirebaseAuth.getInstance().updateUser(request);
System.out.println("Successfully updated user: " + userRecord.getUid());
หลาม
user = auth.update_user(
uid,
email='user@example.com',
phone_number='+15555550100',
email_verified=True,
password='newPassword',
display_name='John Doe',
photo_url='http://www.example.com/12345678/photo.png',
disabled=True)
print('Sucessfully updated user: {0}'.format(user.uid))
ไป
params := (&auth.UserToUpdate{}).
Email("user@example.com").
EmailVerified(true).
PhoneNumber("+15555550100").
Password("newPassword").
DisplayName("John Doe").
PhotoURL("http://www.example.com/12345678/photo.png").
Disabled(true)
u, err := client.UpdateUser(ctx, uid, params)
if err != nil {
log.Fatalf("error updating user: %v\n", err)
}
log.Printf("Successfully updated user: %v\n", u)
ค#
UserRecordArgs args = new UserRecordArgs()
{
Uid = uid,
Email = "modifiedUser@example.com",
PhoneNumber = "+11234567890",
EmailVerified = true,
Password = "newPassword",
DisplayName = "Jane Doe",
PhotoUrl = "http://www.example.com/12345678/photo.png",
Disabled = true,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.UpdateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully updated user: {userRecord.Uid}");
สามารถระบุคุณสมบัติต่างๆ ต่อไปนี้รวมกันได้:
ตารางที่ 2. คุณสมบัติที่สนับสนุนโดยการดำเนินการอัพเดตผู้ใช้
คุณสมบัติ | พิมพ์ | คำอธิบาย |
---|---|---|
email | เชือก | อีเมลหลักใหม่ของผู้ใช้ จะต้องเป็นที่อยู่อีเมลที่ถูกต้อง. |
emailVerified | บูลีน | อีเมลหลักของผู้ใช้จะได้รับการยืนยันหรือไม่ หากไม่ได้ระบุไว้ ค่าเริ่มต้นจะเป็น false |
phoneNumber | เชือก | หมายเลขโทรศัพท์หลักใหม่ของผู้ใช้ ต้องเป็นหมายเลขโทรศัพท์ที่ถูกต้องตามข้อกำหนด E.164 ตั้งค่าเป็น null เพื่อล้างหมายเลขโทรศัพท์ที่มีอยู่ของผู้ใช้ |
password | เชือก | รหัสผ่านดิบใหม่และไม่ได้แฮชของผู้ใช้ ต้องมีความยาวอย่างน้อยหกอักขระ |
displayName | สตริง | null | ชื่อที่แสดงใหม่ของผู้ใช้ ตั้งค่าเป็น null เพื่อล้างชื่อที่แสดงที่มีอยู่ของผู้ใช้ |
photoURL | สตริง | null | URL รูปภาพใหม่ของผู้ใช้ ตั้งค่าเป็น null เพื่อล้าง URL รูปภาพที่มีอยู่ของผู้ใช้ หากไม่ใช่ null จะต้องเป็น URL ที่ถูกต้อง |
disabled | บูลีน | ไม่ว่าผู้ใช้จะถูกปิดการใช้งานหรือไม่ก็ตาม true สำหรับคนพิการ false สำหรับการเปิดใช้งาน |
วิธีการอัปเดตผู้ใช้ส่งคืนออบเจ็กต์ UserRecord
ที่อัปเดตเมื่อการอัปเดตเสร็จสมบูรณ์
หาก uid
ที่ให้ไว้ไม่สอดคล้องกับผู้ใช้ที่มีอยู่ ผู้ใช้ปัจจุบันใช้อีเมลหรือหมายเลขโทรศัพท์ที่ให้ไว้แล้ว หรือไม่สามารถอัปเดตผู้ใช้ได้ด้วยเหตุผลอื่นใด วิธีการข้างต้นจะล้มเหลวโดยมีข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
ลบผู้ใช้
Firebase Admin SDK อนุญาตให้ลบผู้ใช้ที่มีอยู่โดย uid
:
โหนด js
getAuth()
.deleteUser(uid)
.then(() => {
console.log('Successfully deleted user');
})
.catch((error) => {
console.log('Error deleting user:', error);
});
ชวา
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
หลาม
auth.delete_user(uid)
print('Successfully deleted user')
ไป
err := client.DeleteUser(ctx, uid)
if err != nil {
log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid)
ค#
await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");
วิธีการลบผู้ใช้จะส่งกลับผลลัพธ์ที่ว่างเปล่าเมื่อการลบเสร็จสมบูรณ์
หาก uid
ที่ระบุไม่สอดคล้องกับผู้ใช้ที่มีอยู่หรือไม่สามารถลบผู้ใช้ได้ด้วยเหตุผลอื่นใด วิธีการลบผู้ใช้จะทำให้เกิดข้อผิดพลาด สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
ลบผู้ใช้หลายราย
Firebase Admin SDK ยังสามารถลบผู้ใช้หลายรายพร้อมกันได้ อย่างไรก็ตาม โปรดทราบว่าการใช้เมธอดเช่น deleteUsers(uids)
เพื่อลบผู้ใช้หลายรายพร้อมกันจะไม่ทริกเกอร์ตัวจัดการเหตุการณ์ onDelete()
สำหรับ Cloud Functions for Firebase เนื่องจากการลบเป็นกลุ่มไม่ทำให้เกิดเหตุการณ์การลบผู้ใช้กับผู้ใช้แต่ละราย ลบผู้ใช้ทีละราย หากคุณต้องการให้เหตุการณ์การลบผู้ใช้เริ่มทำงานสำหรับผู้ใช้ที่ถูกลบแต่ละราย
โหนด js
getAuth()
.deleteUsers([uid1, uid2, uid3])
.then((deleteUsersResult) => {
console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
deleteUsersResult.errors.forEach((err) => {
console.log(err.error.toJSON());
});
})
.catch((error) => {
console.log('Error deleting users:', error);
});
ชวา
DeleteUsersResult result = FirebaseAuth.getInstance().deleteUsersAsync(
Arrays.asList("uid1", "uid2", "uid3")).get();
System.out.println("Successfully deleted " + result.getSuccessCount() + " users");
System.out.println("Failed to delete " + result.getFailureCount() + " users");
for (ErrorInfo error : result.getErrors()) {
System.out.println("error #" + error.getIndex() + ", reason: " + error.getReason());
}
หลาม
from firebase_admin import auth
result = auth.delete_users(["uid1", "uid2", "uid3"])
print('Successfully deleted {0} users'.format(result.success_count))
print('Failed to delete {0} users'.format(result.failure_count))
for err in result.errors:
print('error #{0}, reason: {1}'.format(result.index, result.reason))
ไป
deleteUsersResult, err := client.DeleteUsers(ctx, []string{"uid1", "uid2", "uid3"})
if err != nil {
log.Fatalf("error deleting users: %v\n", err)
}
log.Printf("Successfully deleted %d users", deleteUsersResult.SuccessCount)
log.Printf("Failed to delete %d users", deleteUsersResult.FailureCount)
for _, err := range deleteUsersResult.Errors {
log.Printf("%v", err)
}
ค#
DeleteUsersResult result = await FirebaseAuth.DefaultInstance.DeleteUsersAsync(new List<string>
{
"uid1",
"uid2",
"uid3",
});
Console.WriteLine($"Successfully deleted {result.SuccessCount} users.");
Console.WriteLine($"Failed to delete {result.FailureCount} users.");
foreach (ErrorInfo err in result.Errors)
{
Console.WriteLine($"Error #{err.Index}, reason: {err.Reason}");
}
วิธีการลบผู้ใช้จะส่งคืนรายการความล้มเหลวสำหรับผู้ใช้ที่ไม่สามารถลบได้ สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
รายชื่อผู้ใช้ทั้งหมด
Firebase Admin SDK อนุญาตให้ดึงรายชื่อผู้ใช้ทั้งหมดเป็นชุด:
โหนด js
const listAllUsers = (nextPageToken) => {
// List batch of users, 1000 at a time.
getAuth()
.listUsers(1000, nextPageToken)
.then((listUsersResult) => {
listUsersResult.users.forEach((userRecord) => {
console.log('user', userRecord.toJSON());
});
if (listUsersResult.pageToken) {
// List next batch of users.
listAllUsers(listUsersResult.pageToken);
}
})
.catch((error) => {
console.log('Error listing users:', error);
});
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();
ชวา
// Start listing users from the beginning, 1000 at a time.
ListUsersPage page = FirebaseAuth.getInstance().listUsers(null);
while (page != null) {
for (ExportedUserRecord user : page.getValues()) {
System.out.println("User: " + user.getUid());
}
page = page.getNextPage();
}
// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
page = FirebaseAuth.getInstance().listUsers(null);
for (ExportedUserRecord user : page.iterateAll()) {
System.out.println("User: " + user.getUid());
}
หลาม
# Start listing users from the beginning, 1000 at a time.
page = auth.list_users()
while page:
for user in page.users:
print('User: ' + user.uid)
# Get next batch of users.
page = page.get_next_page()
# Iterate through all users. This will still retrieve users in batches,
# buffering no more than 1000 users in memory at a time.
for user in auth.list_users().iterate_all():
print('User: ' + user.uid)
ไป
// Note, behind the scenes, the Users() iterator will retrive 1000 Users at a time through the API
iter := client.Users(ctx, "")
for {
user, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("error listing users: %s\n", err)
}
log.Printf("read user user: %v\n", user)
}
// Iterating by pages 100 users at a time.
// Note that using both the Next() function on an iterator and the NextPage()
// on a Pager wrapping that same iterator will result in an error.
pager := iterator.NewPager(client.Users(ctx, ""), 100, "")
for {
var users []*auth.ExportedUserRecord
nextPageToken, err := pager.NextPage(&users)
if err != nil {
log.Fatalf("paging error %v\n", err)
}
for _, u := range users {
log.Printf("read user user: %v\n", u)
}
if nextPageToken == "" {
break
}
}
ค#
// Start listing users from the beginning, 1000 at a time.
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetAsyncEnumerator();
while (await responses.MoveNextAsync())
{
ExportedUserRecords response = responses.Current;
foreach (ExportedUserRecord user in response.Users)
{
Console.WriteLine($"User: {user.Uid}");
}
}
// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
var enumerator = FirebaseAuth.DefaultInstance.ListUsersAsync(null).GetAsyncEnumerator();
while (await enumerator.MoveNextAsync())
{
ExportedUserRecord user = enumerator.Current;
Console.WriteLine($"User: {user.Uid}");
}
ผลลัพธ์แต่ละชุดประกอบด้วยรายชื่อผู้ใช้และโทเค็นหน้าถัดไปที่ใช้เพื่อแสดงรายการผู้ใช้ชุดถัดไป เมื่อระบุผู้ใช้ทั้งหมดแล้ว จะไม่มีการส่งคืน pageToken
หากไม่มีการระบุช่อง maxResults
ระบบจะใช้ผู้ใช้เริ่มต้น 1,000 รายต่อชุด นี่เป็นจำนวนผู้ใช้สูงสุดที่อนุญาตให้แสดงได้ในแต่ละครั้ง ค่าใดๆ ที่มากกว่าค่าสูงสุดจะทำให้เกิดข้อผิดพลาดในการโต้แย้ง หากไม่มีการระบุ pageToken
การดำเนินการจะแสดงรายการผู้ใช้ตั้งแต่ต้น โดยเรียงลำดับตาม uid
สำหรับรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ไข โปรดดูที่ ข้อผิดพลาด API การตรวจสอบสิทธิ์ของผู้ดูแลระบบ
แฮชรหัสผ่านของผู้ใช้ที่อยู่ในรายการ
API นี้ยังส่งคืน passwordSalt
และ passwordHash
ที่แฮชโดยแบ็คเอนด์ Firebase Auth สำหรับผู้ใช้รหัสผ่าน หากผู้ใช้/บัญชีผู้ใช้บริการที่ใช้ในการสร้างโทเค็นการเข้าถึง OAuth คำขอมีสิทธิ์ firebaseauth.configs.getHashConfig
มิฉะนั้น passwordHash
และ passwordSalt
จะไม่ได้รับการตั้งค่า
เนื่องจากลักษณะที่ละเอียดอ่อนของแฮชรหัสผ่าน บัญชีบริการ Firebase Admin SDK จึงไม่มีสิทธิ์ firebaseauth.configs.getHashConfig
ตามค่าเริ่มต้น คุณไม่สามารถเพิ่มสิทธิ์ให้กับผู้ใช้/บัญชีผู้ใช้บริการได้โดยตรง แต่คุณสามารถทำได้โดยอ้อมด้วย การสร้างบทบาท IAM ที่กำหนดเอง
หากต้องการสร้างบทบาท IAM ที่กำหนดเอง:
- ไปที่หน้า บทบาท ในแผง IAM และผู้ดูแลระบบ ใน Google Cloud Console
- เลือกโครงการของคุณจากเมนูแบบเลื่อนลงที่ด้านบนของหน้า
- คลิก สร้างบทบาท
- คลิก เพิ่มสิทธิ์
- ค้นหาสิทธิ์
firebaseauth.configs.getHashConfig
และเลือกช่องทำเครื่องหมายนั้น - คลิก เพิ่ม
- คลิก สร้าง เพื่อสิ้นสุดการสร้างบทบาทใหม่
เพิ่มบทบาทที่กำหนดเองที่สร้างขึ้นให้กับบัญชีผู้ใช้/บริการในหน้า IAM:
- ในแผง IAM และผู้ดูแลระบบ ให้เลือก IAM
- เลือกบริการหรือบัญชีผู้ใช้จากรายชื่อสมาชิกเพื่อทำการแก้ไข
- คลิก เพิ่มบทบาทอื่น
- ค้นหาบทบาทที่กำหนดเองใหม่ที่สร้างขึ้นก่อนหน้านี้
- คลิก บันทึก