SDK quản trị của Firebase cung cấp một API để quản lý Firebase Authentication người dùng có đặc quyền cấp cao. API quản lý người dùng quản trị hỗ trợ bạn hoàn tất các tác vụ sau đây theo phương thức lập trình môi trường máy chủ bảo mật:
- Tạo người dùng mới mà không hạn chế hoặc giới hạn số lượng yêu cầu.
- Tra cứu người dùng theo các tiêu chí khác nhau như uid, email hoặc số điện thoại.
- Liệt kê tất cả người dùng của một dự án cụ thể theo đợt.
- Truy cập vào siêu dữ liệu người dùng, bao gồm cả ngày tạo tài khoản và ngày đăng nhập gần nhất.
- Xoá 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, mà không cần phải đăng nhập với tư cách là người dùng.
- Xác minh email mà không phải thực hiện các quy trình hành động ngoài băng tần cho xác minh email.
- Thay đổi email của người dùng mà không cần gửi đường liên kết đến 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 phải chỉnh sửa tin nhắn SMS quy trình xác minh.
- Thay đổi số điện thoại của người dùng mà không cần xác minh qua SMS luồng.
- Người dùng cấp phép ngoại tuyến ở trạng thái bị vô hiệu hoá, 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 tuỳ chỉnh phù hợp với người dùng của một ứng dụng cụ thể hệ thống quản lý của mình.
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 chạy SDK dành cho quản trị viên.
Truy xuất dữ liệu người dùng
Cách chính để xác định người dùng là dựa vào uid
. Đây là giá trị nhận dạng duy nhất của
người dùng đó. SDK quản trị cung cấp một phương thức cho phép tìm nạp hồ sơ
thông tin về 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());
Python
from firebase_admin import auth
user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))
Tiến hành
// 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 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ề một người dùng hiện có hoặc người dùng đó không thể
vì bất kỳ lý do nào khác, thì phương thức trên sẽ gây ra lỗi.
Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và
các bước giải quyết, hãy xem Lỗi API xác thực quản trị.
Trong một số trường hợp, bạn sẽ có email của một người dùng thay vì uid
của họ. Firebase
SDK dành cho quản trị viên 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());
Python
from firebase_admin import auth
user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))
Tiến hành
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 phần tử
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 người dùng không thể tìm nạp vì bất kỳ lý do nào khác, SDK dành cho quản trị viên sẽ báo lỗi. Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem phần Lỗi API Quản trị Authentication.
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ọ. Chiến lược phát hành đĩa đơn
SDK quản trị của 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());
Python
from firebase_admin import auth
user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))
Tiến hành
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 phần tử
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 bạn cung cấp không phải của một người dùng hiện tại hoặc người dùng đó không thể tìm nạp vì bất kỳ lý do nào khác, SDK dành cho quản trị viên sẽ báo lỗi. Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem phần Lỗi API Quản trị Authentication.
Truy xuất hàng loạt dữ liệu người dùng
SDK quản trị của Firebase cũng cho phép truy xuất danh sách người dùng dựa trên mà bạn cung cấp. Bạn có thể xác định người dùng theo mã nhận dạng người dùng, email hoặc số điện thoại của họ. Bạn có thể cung cấp tối đa 100 giá trị nhận dạng cho một lệnh gọi. Giá trị nhận dạng có thể chứa nhiều 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);
}
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)
Tiến hành
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 nhập, với mỗi mục nhập
chứa UserRecord
tương ứng hoặc một lỗi cho biết lý do
không thể tra cứu mã nhận dạng đó. Để xem danh sách đầy đủ các mã lỗi,
bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem bài viết về API Quản trị Authentication
Lỗi.
Tạo người dùng
SDK quản trị cung cấp một phương thức cho phép bạn tạo người dùng Firebase Authentication mới. Phương thức này chấp nhận một đối tượng chứa thông tin hồ sơ để thêm vào đối tượng mới được tạo tài khoản người dùng:
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))
Tiến hành
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, Firebase Authentication sẽ tạo một uid
ngẫu nhiên cho người dùng mới. Nếu
thay vào đó, bạn muốn chỉ định uid
của riêng mình cho người dùng mới, bạn có thể thêm nó vào
dưới dạng một đối số được truyền đến 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());
Python
user = auth.create_user(
uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))
Tiến hành
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}");
Bạn có thể cung cấp bất kỳ kiểu kết hợp nào của các thuộc tính sau đây:
Bảng 1. Các thuộc tính mà thao tác tạo người dùng hỗ trợ
Tài sản | Loại | Mô tả |
---|---|---|
uid |
chuỗi |
uid để chỉ định cho người dùng mới tạo. Phải là
chuỗi dài từ 1 đến 128 ký tự. Nếu không được cung cấp,
uid ngẫu nhiên sẽ được tạo tự động. Ngắn hơn
uid mang lại hiệu suất tốt hơn.
|
email |
chuỗi | Email chính của người dùng. Phải là đị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,
mặc định là false .
|
phoneNumber |
chuỗi | Số điện thoại chính của người dùng. Phải tuân thủ thông số kỹ thuật E.164 hợp lệ số điện thoại của họ. |
password |
chuỗi | Mật khẩu thô, chưa được băm của người dùng. Phải dài ít nhất 6 ký tự. |
displayName |
chuỗi | Lựa chọn của người dùng tên hiển thị. |
photoURL |
chuỗi | URL ảnh của người dùng. |
disabled |
boolean |
Liệu người dùng có bị vô hiệu hoá hay không. true cho người khuyết tật;
Đã bật false . 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 sẽ trả về một đối tượng UserRecord
cho
người dùng mới được tạo.
Nếu uid
được cung cấp thì email hoặc số điện thoại hiện đã được sử dụng bởi
không thể tạo người dùng hoặc người dùng vì bất kỳ lý do nào khác, phương pháp trên không thành công
có lỗi. Để xem danh sách đầy đủ các mã lỗi, bao gồm
nội dung mô tả và các bước giải quyết, hãy xem bài viết về API Quản trị Authentication
Lỗi.
Cập nhật người dùng
SDK dành cho quản trị viên Firebase hỗ trợ việc sửa đổi dữ liệu của người dùng hiện có. Bạn cần
để chỉ định uid
cùng với các thuộc tính cần 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());
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))
Tiến hành
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}");
Bạn có thể cung cấp bất kỳ kiểu kết hợp nào của các thuộc tính sau đây:
Bảng 2. Các thuộc tính mà thao tác cập nhật người dùng hỗ trợ
Tài sản | Loại | Mô tả |
---|---|---|
email |
chuỗi | Email chính mới của người dùng. Phải là đị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,
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 tuân thủ thông số kỹ thuật E.164 hợp lệ
số điện thoại của họ. Đặt thành null để xoá thông tin hiện có của người dùng
số điện thoại của họ.
|
password |
chuỗi | Mật khẩu thô mới, chưa được băm của người dùng. Phải dài ít nhất 6 ký tự. |
displayName |
chuỗi | null |
Lựa chọn của người dùng tên hiển thị mới. Đặt thành null để xoá
tên hiển thị hiện tại.
|
photoURL |
chuỗi | null |
Lựa chọn của người dùng URL của ảnh mới. Đặt thành null để xoá
URL ảnh hiện có. Nếu không phải là null , đây phải là một URL hợp lệ.
|
disabled |
boolean |
Liệu người dùng có bị vô hiệu hoá hay không. true cho người khuyết tật;
Đã bật false .
|
Phương thức người dùng cập nhật trả về đối tượng UserRecord
được cập nhật khi
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 có, thì giá trị được cung cấp
email hoặc số điện thoại đã được người dùng hiện tại sử dụng hoặc người dùng không thể
vì bất kỳ lý do nào khác, phương pháp trên không thành công với
. Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và cách giải quyết
các bước, hãy xem Lỗi API Quản trị Authentication.
Xóa người dùng
SDK quản trị của Firebase cho phép xoá người dùng hiện tại trước 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.");
Python
auth.delete_user(uid)
print('Successfully deleted user')
Tiến hành
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 xoá người dùng sẽ trả về kết quả trống khi quá trình xoá 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ị xoá vì bất kỳ lý do nào khác, thì phương thức xoá người dùng sẽ gây ra lỗi.
Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả
và các bước giải quyết, hãy xem phần Lỗi API Quản trị Authentication.
Xoá nhiều người dùng
SDK quản trị của Firebase cũng có thể xoá 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 thức như deleteUsers(uids)
để xóa nhiều người dùng tại
một lần sẽ không kích hoạt trình xử lý sự kiện onDelete()
cho Cloud Functions for Firebase.
Điều này là do thao tác xoá hàng loạt không kích hoạt sự kiện xoá người dùng trên
cho mỗi người dùng. Xoá người dùng tại
một thời điểm nếu bạn muốn kích hoạt sự kiện xoá người dùng cho mỗi người dùng đã xoá.
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))
Tiến hành
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 xoá người dùng sẽ trả về danh sách lỗi cho những người dùng đã Không thể xoá. Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem bài viết Lỗi API Quản trị Authentication.
Liệt kê tất cả người dùng
SDK quản trị của 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());
}
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)
Tiến hành
// 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 lô kết quả chứa một danh sách người dùng và mã thông báo trang tiếp theo được 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
Trả về pageToken
.
Nếu bạn không chỉ định trường maxResults
, thì hệ thống sẽ sử dụng 1.000 người dùng mặc định trong mỗi lô.
Đâ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ỳ hạng nào
lớn hơn giá trị tối đa sẽ tạo ra lỗi đối số.
Nếu bạn không chỉ định pageToken
, thao tác này sẽ liệt kê người dùng trong
đầu tiên, được sắp xếp theo uid
.
Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem bài viết Lỗi API Quản trị Authentication.
Hàm băm mật khẩu của người dùng có trong danh sách
API này cũng trả về passwordSalt
và passwordHash
đã băm bằng hàm
Phần phụ trợ xác thực Firebase dành cho người dùng có mật khẩu nếu tài khoản người dùng/dịch vụ đã sử dụng
tạo mã thông báo truy cập OAuth cho yêu cầu có
Quyền firebaseauth.configs.getHashConfig
. Nếu không, passwordHash
và passwordSalt
sẽ không được thiết lập.
Do tính chất nhạy cảm của hàm băm mật khẩu, dịch vụ SDK Quản trị của Firebase
tài khoản không có quyền firebaseauth.configs.getHashConfig
bằng cách
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
gián tiếp bằng cách
tạo vai trò IAM tuỳ chỉnh.
Cách tạo vai trò IAM tuỳ chỉnh:
- Chuyển đến trang Vai trò trong IAM và quản trị viên trong bảng điều khiển bảng điều khiển Google Cloud.
- Chọn dự án của bạn trong trình đơn thả xuống ở đầu trang.
- Nhấp vào TẠO VAI TRÒ
- Nhấp vào THÊM QUYỀN
- Tìm quyền
firebaseauth.configs.getHashConfig
rồi chọn quyền đó hộp kiểm. - Nhấp vào THÊM
- Nhấp vào TẠO để hoàn tất việc tạo vai trò mới.
Thêm vai trò tuỳ chỉnh đã tạo vào tài khoản người dùng/dịch vụ trên trang IAM:
- Trong IAM và quản trị viên, chọn IAM
- Chọn dịch vụ hoặc tài khoản người dùng trong danh sách thành viên để chỉnh sửa.
- Nhấp vào THÊM VAI TRÒ KHÁC.
- Tìm vai trò tuỳ chỉnh mới đã tạo trước đó.
- Nhấp vào LƯU.