จัดการผู้ใช้

Firebase Admin SDK มี API สำหรับจัดการผู้ใช้การตรวจสอบสิทธิ์ Firebase ด้วยสิทธิ์ระดับสูง API การจัดการผู้ใช้ที่ดูแลระบบจะช่วยให้คุณทำงานต่อไปนี้โดยใช้โปรแกรมจากสภาพแวดล้อมของเซิร์ฟเวอร์ที่ปลอดภัยได้

  • สร้างผู้ใช้ใหม่โดยไม่มีการควบคุมหรือจำกัดอัตราคำขอ
  • ค้นหาผู้ใช้ตามเกณฑ์ต่างๆ เช่น UID, อีเมล หรือหมายเลขโทรศัพท์
  • แสดงรายการผู้ใช้ทั้งหมดของโปรเจ็กต์ที่ระบุเป็นกลุ่ม
  • เข้าถึงข้อมูลเมตาของผู้ใช้ รวมถึงวันที่สร้างบัญชีและวันที่ลงชื่อเข้าใช้ล่าสุด
  • ลบผู้ใช้โดยไม่ต้องใช้รหัสผ่านที่มีอยู่
  • อัปเดตพร็อพเพอร์ตี้ผู้ใช้ รวมถึงรหัสผ่าน โดยไม่ต้องลงชื่อเข้าใช้ในฐานะผู้ใช้
  • ยืนยันอีเมลโดยไม่ต้องทำตามขั้นตอนการดำเนินการนอกขอบเขตเพื่อยืนยันอีเมล
  • เปลี่ยนอีเมลของผู้ใช้โดยไม่ส่งลิงก์อีเมลเพื่อเพิกถอนการเปลี่ยนแปลงเหล่านี้
  • สร้างผู้ใช้ใหม่ที่มีหมายเลขโทรศัพท์โดยไม่ต้องผ่านขั้นตอนการยืนยันทาง SMS
  • เปลี่ยนหมายเลขโทรศัพท์ของผู้ใช้ได้โดยไม่ต้องทำตามขั้นตอนการยืนยันทาง SMS
  • ผู้ใช้ที่จัดสรรแบบออฟไลน์จะอยู่ในสถานะปิดใช้ จากนั้นค่อยควบคุมในภายหลังว่าจะเปิดใช้เมื่อใด
  • สร้างคอนโซลผู้ใช้ที่กำหนดเองซึ่งปรับให้เหมาะกับระบบการจัดการผู้ใช้ของแอปพลิเคชันเฉพาะ

ก่อนเริ่มต้น

คุณต้องมีบัญชีบริการจึงจะใช้ API การจัดการผู้ใช้ที่ Firebase Admin SDK มีให้ ทำตามวิธีการตั้งค่า เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Admin SDK

เรียกข้อมูลผู้ใช้

วิธีหลักในการระบุผู้ใช้คือการใช้ uid ซึ่งเป็นตัวระบุที่ไม่ซ้ำกันสำหรับผู้ใช้รายนั้น Admin SDK มีวิธีที่ช่วยให้ดึงข้อมูลโปรไฟล์ของผู้ใช้โดย uid ได้ ดังนี้

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

Java

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

Python

from firebase_admin import auth

user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))

Go

// 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)

C#

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 รองรับการค้นหาข้อมูลผู้ใช้ด้วยอีเมล

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

Java

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

Python

from firebase_admin import auth

user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))

Go

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)

C#

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 จะแสดงข้อผิดพลาด ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

ในกรณีอื่นๆ คุณจะใช้หมายเลขโทรศัพท์ของผู้ใช้แทน uid Firebase Admin SDK รองรับการค้นหาข้อมูลผู้ใช้ด้วยหมายเลขโทรศัพท์ ดังนี้

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

Java

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

Python

from firebase_admin import auth

user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))

Go

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)

C#

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 จะแสดงข้อผิดพลาด ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

เรียกข้อมูลผู้ใช้จำนวนมาก

Firebase Admin SDK ยังอนุญาตให้เรียกข้อมูลรายชื่อผู้ใช้ตามตัวระบุที่คุณให้มาได้ด้วย คุณจะระบุผู้ใช้ได้ด้วยรหัสผู้ใช้ อีเมล หรือหมายเลขโทรศัพท์ สามารถระบุตัวระบุสูงสุด 100 รายการในการเรียกครั้งเดียว ตัวระบุมีหลายประเภทรวมกัน:

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

Java

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

Python

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)

Go

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

C#

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 ใหม่ได้ วิธีนี้จะยอมรับออบเจ็กต์ที่มีข้อมูลโปรไฟล์ที่จะรวมในบัญชีผู้ใช้ที่สร้างขึ้นใหม่

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

Java

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

Python

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

Go

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)

C#

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 ของคุณเองสำหรับผู้ใช้ใหม่ คุณสามารถรวมพารามิเตอร์นี้เป็นอาร์กิวเมนต์ที่ส่งไปยังเมธอดการสร้างผู้ใช้ ดังนี้

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

Java

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

Python

user = auth.create_user(
    uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))

Go

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)

C#

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 string uid ที่จะมอบหมายให้กับผู้ใช้ที่สร้างขึ้นใหม่ ต้องเป็นสตริงที่ยาว 1-128 อักขระ (รวมค่าแรกและค่าสุดท้าย) หากไม่ระบุ ระบบจะสร้าง uid แบบสุ่มโดยอัตโนมัติ ยิ่งไปกว่านั้น uid ที่สั้นกว่าก็มีประสิทธิภาพดีกว่า
email string อีเมลหลักของผู้ใช้ ต้องเป็นที่อยู่อีเมลที่ถูกต้อง
emailVerified boolean อีเมลหลักของผู้ใช้ได้รับการยืนยันหรือไม่ หากไม่ระบุ ค่าเริ่มต้นจะเป็น false
phoneNumber string หมายเลขโทรศัพท์หลักของผู้ใช้ ต้องเป็นหมายเลขโทรศัพท์ที่ถูกต้องตามข้อกำหนด E.164
password string รหัสผ่านดิบที่ไม่ได้แฮชของผู้ใช้ ต้องมีความยาวอย่างน้อย 6 อักขระ
displayName string ชื่อที่แสดงของผู้ใช้
photoURL string URL รูปภาพของผู้ใช้
disabled boolean ผู้ใช้ถูกปิดใช้งานหรือไม่ true สำหรับปิดใช้, false สำหรับเปิดใช้ หากไม่ระบุ ระบบจะใช้ค่าเริ่มต้นเป็น false

วิธีการสร้างผู้ใช้จะแสดงออบเจ็กต์ UserRecord สำหรับผู้ใช้ที่สร้างใหม่

หากผู้ใช้เดิมใช้ uid, อีเมล หรือหมายเลขโทรศัพท์ที่ระบุอยู่แล้ว หรือระบบสร้างผู้ใช้ดังกล่าวไม่ได้ด้วยเหตุผลอื่น วิธีการข้างต้นจะไม่สำเร็จโดยมีข้อผิดพลาด ดูรายการรหัสข้อผิดพลาดทั้งหมดรวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ API การตรวจสอบสิทธิ์ผู้ดูแลระบบ

อัปเดตผู้ใช้

Firebase Admin SDK ช่วยอำนวยความสะดวกในการแก้ไขข้อมูลผู้ใช้ที่มีอยู่ คุณต้องระบุ uid พร้อมกับพร็อพเพอร์ตี้ที่จะอัปเดตสำหรับผู้ใช้รายนั้น

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

Java

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

Python

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

Go

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)

C#

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 string อีเมลหลักรายการใหม่ของผู้ใช้ ต้องเป็นที่อยู่อีเมลที่ถูกต้อง
emailVerified boolean อีเมลหลักของผู้ใช้ได้รับการยืนยันหรือไม่ หากไม่ระบุ ค่าเริ่มต้นจะเป็น false
phoneNumber string หมายเลขโทรศัพท์หลักใหม่ของผู้ใช้ ต้องเป็นหมายเลขโทรศัพท์ที่ถูกต้องตามข้อกำหนด E.164 ตั้งค่าเป็น null เพื่อล้างหมายเลขโทรศัพท์ที่มีอยู่ของผู้ใช้
password string รหัสผ่านดิบที่ไม่ได้แฮชรายการใหม่ของผู้ใช้ ต้องมีความยาวอย่างน้อย 6 อักขระ
displayName สตริง | null ชื่อที่แสดงใหม่ของผู้ใช้ ตั้งค่าเป็น null เพื่อล้างชื่อที่แสดงที่มีอยู่ของผู้ใช้
photoURL สตริง | null URL รูปภาพใหม่ของผู้ใช้ ตั้งค่าเป็น null เพื่อล้าง URL รูปภาพที่มีอยู่ของผู้ใช้ หากไม่ใช่ null ต้องเป็น URL ที่ถูกต้อง
disabled boolean ผู้ใช้ถูกปิดใช้งานหรือไม่ true สำหรับปิดใช้, false สำหรับเปิดใช้

วิธีให้ผู้ใช้อัปเดตจะแสดงออบเจ็กต์ UserRecord ที่อัปเดตแล้วเมื่อการอัปเดตเสร็จสมบูรณ์

หาก uid ที่ระบุไม่ตรงกับผู้ใช้ที่มีอยู่ แสดงว่ามีการใช้อีเมลหรือหมายเลขโทรศัพท์ที่ระบุแล้วโดยผู้ใช้เดิม หรืออัปเดตผู้ใช้ไม่ได้ด้วยเหตุผลอื่น วิธีการข้างต้นจะไม่สำเร็จโดยมีข้อผิดพลาด ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

ลบผู้ใช้

Firebase Admin SDK อนุญาตให้ลบผู้ใช้ที่มีอยู่ภายใน uid ดังนี้

Node.js

getAuth()
  .deleteUser(uid)
  .then(() => {
    console.log('Successfully deleted user');
  })
  .catch((error) => {
    console.log('Error deleting user:', error);
  });

Java

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

Python

auth.delete_user(uid)
print('Successfully deleted user')

Go

err := client.DeleteUser(ctx, uid)
if err != nil {
	log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid)

C#

await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");

วิธีการลบของผู้ใช้จะแสดงผลลัพธ์ที่ว่างเปล่าเมื่อการลบเสร็จสมบูรณ์

หาก uid ที่ระบุไม่ตรงกับผู้ใช้ที่มีอยู่ หรือไม่สามารถลบผู้ใช้ได้ไม่ว่าด้วยเหตุผลใดก็ตาม วิธีลบผู้ใช้จะแสดงข้อผิดพลาด ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

ลบผู้ใช้หลายคน

นอกจากนี้ Firebase Admin SDK ยังลบผู้ใช้หลายคนพร้อมกันได้ด้วย อย่างไรก็ตาม โปรดทราบว่าการใช้เมธอดอย่าง deleteUsers(uids) เพื่อลบผู้ใช้หลายรายพร้อมกันจะไม่ทริกเกอร์ตัวแฮนเดิลเหตุการณ์ onDelete() สำหรับ Cloud Functions for Firebase เนื่องจากการลบเป็นกลุ่มจะไม่ทริกเกอร์เหตุการณ์การลบผู้ใช้สำหรับผู้ใช้แต่ละราย ลบผู้ใช้ทีละคนหากต้องการให้เหตุการณ์การลบผู้ใช้เริ่มทำงานสำหรับผู้ใช้ที่ถูกลบแต่ละราย

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

Java

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

Python

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

Go

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

C#

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

วิธีการลบผู้ใช้จะแสดงรายการความล้มเหลวสำหรับผู้ใช้ที่ลบไม่ได้ ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

แสดงผู้ใช้ทั้งหมด

Firebase Admin SDK ทำให้สามารถเรียกข้อมูลรายชื่อผู้ใช้ทั้งหมดเป็นกลุ่มได้ ดังนี้

Node.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();

Java

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

Python

# 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)

Go

// 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
	}
}

C#

// 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

ดูรายการรหัสข้อผิดพลาดทั้งหมด รวมถึงคำอธิบายและขั้นตอนการแก้ปัญหาได้ที่ข้อผิดพลาดของ Admin Authentication API

แฮชรหัสผ่านของผู้ใช้ที่แสดง

API นี้ยังแสดงผล passwordSalt และ passwordHash ที่แฮชโดยแบ็กเอนด์ Firebase Auth สำหรับผู้ใช้รหัสผ่านด้วย หากผู้ใช้/บริการที่ใช้สร้างโทเค็นเพื่อการเข้าถึง OAuth ของคำขอมีสิทธิ์ firebaseauth.configs.getHashConfig มิเช่นนั้น ระบบจะไม่ตั้งค่า passwordHash และ passwordSalt

เนื่องจากแฮชรหัสผ่านมีความละเอียดอ่อน บัญชีบริการ Firebase Admin SDK จึงไม่มีสิทธิ์ firebaseauth.configs.getHashConfig โดยค่าเริ่มต้น คุณเพิ่มสิทธิ์ให้กับบัญชีผู้ใช้/บริการโดยตรงไม่ได้ แต่จะเพิ่มได้ทางอ้อมโดยสร้างบทบาท IAM ที่กำหนดเอง

วิธีสร้างบทบาท IAM ที่กำหนดเอง

  1. ไปที่หน้าบทบาทในแผง IAM และผู้ดูแลระบบในคอนโซล Google Cloud
  2. เลือกโปรเจ็กต์จากเมนูแบบเลื่อนลงที่ด้านบนของหน้า
  3. คลิกสร้างบทบาท
  4. คลิกเพิ่มสิทธิ์
  5. ค้นหาสิทธิ์ firebaseauth.configs.getHashConfig แล้วเลือกช่องทำเครื่องหมายดังกล่าว
  6. คลิกเพิ่ม
  7. คลิกสร้างเพื่อสร้างบทบาทใหม่ให้เสร็จสิ้น

เพิ่มบทบาทที่กำหนดเองที่สร้างขึ้นลงในบัญชีผู้ใช้/บริการในหน้า IAM ดังนี้

  1. ในแผง IAM และผู้ดูแลระบบ ให้เลือก IAM
  2. เลือกบริการหรือบัญชีผู้ใช้จากรายการสมาชิกเพื่อแก้ไข
  3. คลิกเพิ่มบทบาทอื่น
  4. ค้นหาบทบาทใหม่ที่กำหนดเองที่สร้างไว้ก่อนหน้านี้
  5. คลิกบันทึก