Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Quản lý người dùng

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

SDK quản trị Firebase cung cấp API để quản lý người dùng Xác thực Firebase của bạn với các đặc quyền nâng cao. API quản lý người dùng quản trị cung cấp cho bạn khả năng hoàn thành các tác vụ sau theo chương trình từ môi trường máy chủ an toàn:

  • Tạo người dùng mới mà không có bất kỳ điều chỉnh hoặc giới hạn tốc độ nào.
  • Tra cứu người dùng theo nhiều tiêu chí khác nhau như uid, email hay số điện thoại.
  • Liệt kê tất cả người dùng của một dự án được chỉ định theo lô.
  • Truy cập siêu dữ liệu người dùng bao gồm ngày tạo tài khoản và ngày đăng nhập lần cuối.
  • Xóa người dùng mà không yêu cầu mật khẩu hiện tại của họ.
  • Cập nhật thuộc tính người dùng - bao gồm cả mật khẩu của họ - mà không cần phải đăng nhập với tư cách người dùng.
  • Xác minh email mà không phải trải qua các luồng hành động ngoài luồng để xác minh email.
  • Thay đổi email của người dùng mà không gửi liên kết email để thu hồi những thay đổi này.
  • Tạo người dùng mới bằng số điện thoại mà không cần phải trải qua quy trình xác minh SMS.
  • Thay đổi số điện thoại của người dùng mà không cần phải trải qua quy trình xác minh SMS.
  • Cung cấp ngoại tuyến cho người dùng ở trạng thái bị vô hiệu hóa và sau đó kiểm soát thời điểm bật chúng.
  • Xây dựng bảng điều khiển người dùng tùy chỉnh phù hợp với hệ thống quản lý người dùng của một ứng dụng cụ thể.

Trước khi bắt đầu

Để sử dụng API quản lý người dùng do SDK quản trị Firebase cung cấp, bạn phải có tài khoản dịch vụ. Làm theo hướng dẫn thiết lập để biết thêm thông tin về cách khởi tạo SDK quản trị.

Truy xuất dữ liệu người dùng

Cách chính để xác định người dùng là theo uid của họ, một mã định danh duy nhất cho người dùng đó. SDK dành cho quản trị viên cung cấp một phương thức cho phép tìm nạp thông tin hồ sơ của người dùng theo uid của họ:

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

con trăn

from firebase_admin import auth

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

Đi

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

Phương thức này trả về một đối tượng UserRecord cho người dùng tương ứng với uid được cung cấp cho phương thức.

Nếu uid được cung cấp không thuộc về người dùng hiện tại hoặc không thể tìm nạp người dùng vì bất kỳ lý do nào khác, thì phương pháp trên sẽ đưa ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực của quản trị viên .

Trong một số trường hợp, bạn sẽ có email của người dùng thay vì uid của họ. SDK quản trị Firebase hỗ trợ tra cứu thông tin người dùng bằng email:

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

con trăn

from firebase_admin import auth

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

Đi

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

Phương thức này trả về một đối tượng UserRecord cho người dùng tương ứng với email được cung cấp.

Nếu email được cung cấp không thuộc về người dùng hiện tại hoặc không thể tìm nạp người dùng vì bất kỳ lý do nào khác, SDK quản trị sẽ đưa ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Trong các trường hợp khác, bạn sẽ có số điện thoại của người dùng thay vì uid của họ. SDK quản trị Firebase hỗ trợ tra cứu thông tin người dùng bằng số điện thoại:

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

con trăn

from firebase_admin import auth

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

Đi

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

Phương thức này trả về một đối tượng UserRecord cho người dùng tương ứng với số điện thoại được cung cấp.

Nếu số điện thoại đã cung cấp không thuộc về người dùng hiện tại hoặc không thể tìm nạp người dùng vì bất kỳ lý do nào khác, SDK quản trị sẽ đưa ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Truy xuất hàng loạt dữ liệu người dùng

SDK quản trị Firebase cũng cho phép truy xuất danh sách người dùng dựa trên số nhận dạng mà bạn cung cấp. Bạn có thể xác định người dùng bằng ID người dùng, email hoặc số điện thoại của họ. Có thể cung cấp tối đa 100 số nhận dạng trong một cuộc gọi. Định danh có thể chứa hỗn hợp các loại:

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

con trăn

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)

Đi

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

Phương thức này trả về một danh sách có cùng kích thước với danh sách đầu vào, với mỗi mục chứa UserRecord tương ứng hoặc một lỗi cho biết lý do tại sao mã định danh đó không thể tra cứu được. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Tạo người dùng

SDK quản trị cung cấp phương thức cho phép bạn tạo người dùng Xác thực Firebase mới. Phương thức này chấp nhận một đối tượng chứa thông tin hồ sơ để đưa vào tài khoản người dùng mới được tạo:

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

con trăn

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

Đi

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

Theo mặc định, Xác thực Firebase sẽ tạo uid ngẫu nhiên cho người dùng mới. Thay vào đó, nếu bạn muốn chỉ định uid của riêng mình cho người dùng mới, bạn có thể đưa nó vào làm đối số được truyền cho phương thức tạo người dùng:

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

con trăn

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

Đi

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

Có thể cung cấp bất kỳ sự kết hợp nào của các thuộc tính sau:

Bảng 1. Các thuộc tính được hỗ trợ bởi thao tác tạo người dùng

Tài sản Loại Sự miêu tả
uid chuỗi uid để gán cho người dùng mới được tạo. Phải là một chuỗi dài từ 1-128 ký tự. Nếu không được cung cấp, uid ngẫu nhiên sẽ được tạo tự động. uid s ngắn hơn cung cấp hiệu suất tốt hơn.
email chuỗi Email chính của người dùng. Phải la một địa chỉ email hợp lệ.
emailVerified boolean Email chính của người dùng có được xác minh hay không. Nếu không được cung cấp, giá trị mặc định là false .
phoneNumber chuỗi Số điện thoại chính của người dùng. Phải là số điện thoại tuân thủ thông số kỹ thuật E.164 hợp lệ.
password chuỗi Mật khẩu thô, chưa băm của người dùng. Phải dài ít nhất sáu ký tự.
displayName chuỗi Tên hiển thị của người dùng.
photoURL chuỗi URL ảnh của người dùng.
disabled boolean Người dùng có bị vô hiệu hóa hay không. true cho người khuyết tật; false để kích hoạt. Nếu không được cung cấp, giá trị mặc định là false .

Phương thức tạo người dùng trả về một đối tượng UserRecord cho người dùng mới được tạo.

Nếu uid , email hoặc số điện thoại được cung cấp đã được người dùng hiện tại sử dụng hoặc người dùng không thể được tạo vì bất kỳ lý do nào khác, thì phương pháp trên không thành công và xảy ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Cập nhật người dùng

SDK quản trị Firebase hỗ trợ sửa đổi dữ liệu của người dùng hiện có. Bạn cần chỉ định một uid cùng với các thuộc tính để cập nhật cho người dùng đó:

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

con trăn

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

Đi

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

Có thể cung cấp bất kỳ sự kết hợp nào của các thuộc tính sau:

Bảng 2. Các thuộc tính được hỗ trợ bởi thao tác người dùng cập nhật

Tài sản Loại Sự miêu tả
email chuỗi Email chính mới của người dùng. Phải la một địa chỉ email hợp lệ.
emailVerified boolean Email chính của người dùng có được xác minh hay không. Nếu không được cung cấp, giá trị mặc định là false .
phoneNumber chuỗi Số điện thoại chính mới của người dùng. Phải là số điện thoại tuân thủ thông số kỹ thuật E.164 hợp lệ. Đặt thành null để xóa số điện thoại hiện tại của người dùng.
password chuỗi Mật khẩu thô, chưa băm mới của người dùng. Phải dài ít nhất sáu ký tự.
displayName chuỗi | null Tên hiển thị mới của người dùng. Đặt thành null để xóa tên hiển thị hiện có của người dùng.
photoURL chuỗi | null URL ảnh mới của người dùng. Đặt thành null để xóa URL ảnh hiện tại của người dùng. Nếu không null , phải là một URL hợp lệ.
disabled boolean Người dùng có bị vô hiệu hóa hay không. true cho người khuyết tật; false để kích hoạt.

Phương thức người dùng cập nhật trả về một đối tượng UserRecord được cập nhật khi quá trình cập nhật hoàn tất thành công.

Nếu uid được cung cấp không tương ứng với người dùng hiện tại, email hoặc số điện thoại được cung cấp đã được người dùng hiện tại sử dụng hoặc không thể cập nhật người dùng vì bất kỳ lý do nào khác, thì phương pháp trên không thành công và xảy ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Xóa người dùng

SDK quản trị Firebase cho phép xóa người dùng hiện có theo uid của họ:

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

con trăn

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

Đi

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

Phương thức người dùng xóa trả về kết quả trống khi quá trình xóa hoàn tất thành công.

Nếu uid được cung cấp không tương ứng với người dùng hiện có hoặc người dùng không thể bị xóa vì bất kỳ lý do nào khác, phương thức xóa người dùng sẽ đưa ra lỗi. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Xóa nhiều người dùng

SDK quản trị Firebase cũng có thể xóa nhiều người dùng cùng một lúc. Tuy nhiên, lưu ý rằng việc sử dụng các phương pháp như deleteUsers(uids) để xóa nhiều người dùng cùng lúc sẽ không kích hoạt trình xử lý sự kiện onDelete() cho Cloud Functions cho Firebase. Điều này là do xóa hàng loạt không kích hoạt sự kiện xóa người dùng trên mỗi người dùng. Xóa từng người dùng nếu bạn muốn các sự kiện xóa người dùng kích hoạt cho từng người dùng đã xóa.

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

con trăn

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

Đi

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

Phương thức xóa người dùng trả về một danh sách lỗi đối với những người dùng không thể xóa được. Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Liệt kê tất cả người dùng

SDK quản trị Firebase cho phép truy xuất toàn bộ danh sách người dùng theo đợt:

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

con trăn

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

Đi

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

Mỗi nhóm kết quả chứa danh sách người dùng và mã thông báo trang tiếp theo được sử dụng để liệt kê nhóm người dùng tiếp theo. Khi tất cả người dùng đã được liệt kê, không có pageToken nào được trả lại.

Nếu không có trường maxResults nào được chỉ định, thì 1000 người dùng mặc định mỗi đợt sẽ được sử dụng. Đây cũng là số lượng người dùng tối đa được phép liệt kê tại một thời điểm. Bất kỳ giá trị nào lớn hơn giá trị tối đa sẽ gây ra lỗi đối số. Nếu không có pageToken nào được chỉ định, hoạt động sẽ liệt kê người dùng ngay từ đầu, được sắp xếp theo uid .

Để biết danh sách đầy đủ các mã lỗi, bao gồm mô tả và các bước giải quyết, hãy xem Lỗi API xác thực quản trị viên .

Băm mật khẩu của người dùng được liệt kê

API này cũng trả về passwordSaltpasswordHash được phần phụ trợ Firebase Auth băm cho người dùng mật khẩu nếu tài khoản người dùng/dịch vụ được sử dụng để tạo mã thông báo truy cập OAuth yêu cầu có quyền firebaseauth.configs.getHashConfig . Nếu không, passwordHashpasswordSalt sẽ không được đặt.

Do tính chất nhạy cảm của hàm băm mật khẩu, tài khoản dịch vụ SDK quản trị Firebase không có quyền firebaseauth.configs.getHashConfig theo mặc định. Bạn không thể thêm quyền trực tiếp vào tài khoản người dùng/dịch vụ, nhưng bạn có thể làm như vậy một cách gián tiếp bằng cách tạo vai trò IAM tùy chỉnh .

Để tạo vai trò IAM tùy chỉnh:

  1. Truy cập trang Vai trò trong IAM & bảng quản trị trong Google Cloud Console.
  2. Chọn dự án của bạn từ trình đơn thả xuống ở đầu trang.
  3. Nhấp vào TẠO VAI TRÒ
  4. Nhấp vào THÊM QUYỀN
  5. Tìm kiếm quyền firebaseauth.configs.getHashConfig và chọn hộp kiểm đó.
  6. Nhấp vào THÊM
  7. Nhấp vào TẠO để hoàn thành việc tạo vai trò mới.

Thêm vai trò tùy chỉnh đã tạo vào tài khoản người dùng/dịch vụ trong trang IAM:

  1. Trong bảng IAM & quản trị , hãy chọn IAM
  2. Chọn dịch vụ hoặc tài khoản người dùng từ danh sách thành viên để chỉnh sửa.
  3. Nhấp vào THÊM VAI TRÒ KHÁC .
  4. Tìm kiếm vai trò tùy chỉnh mới đã tạo trước đó.
  5. Nhấp vào LƯU .