有没有办法列出所有使用firebase admin sdk的用户?文档只显示了通过uid或email获取一个用户。
bgibtngc1#
最新的firebase-admin sdk(从现在的5.4.2版本开始)有listUsers API可以做到这一点。有一件事要添加到示例中,nextPageToken必须被省略或者是有效的userid。(IMO,这在示例和API文档中都不明显。)
firebase-admin sdk
5.4.2
listUsers
nextPageToken
eblbsuwk2#
原答复:没有用于从Firebase Admin SDK检索用户列表的公共API。处理这种情况的典型方法是在Firebase数据库中保留一个相关用户信息的列表。更多信息请参见原始问题:How do I return a list of users if I use the Firebase simple username & password authentication
lyfkaqu13#
您可以使用admin SDK中提供的auth().listUsers()方法。详细的示例代码可以在这里找到。Firebase Admin SDK文档
auth().listUsers()
plicqrtu4#
这不是一个好的解决方案,但您可以使用Firebase CLI导出用户数据并与您的应用程序集成。授权:导出firebase身份验证:导出帐户文件--格式=文件格式https://firebase.google.com/docs/cli/auth
sqserrrh5#
2020年3月,在与文档和各种帖子进行了大量的斗争之后,我找到了以下作品:
const admin = require("firebase-admin"); const serviceAccount = require('./serviceAccount.json'); // see notes below about this. const listAllUsers = () => { const app = admin.initializeApp({ databaseURL: 'https://your-project-name.firebaseio.com', credential: admin.credential.cert(serviceAccount) <-- see notes below about this }); app.auth().listUsers(1000) // lists up to 1000 users .then((listUsersResult) => { let users = JSON.stringify(listUsersResult); const date = new Date(); const day = date.getDate(); const month = date.getMonth() + 1; fs.writeFileSync(__dirname + `/../my-backups/authentication-backup_${day}_${month}_2020.json`, users); }) .catch(function (error) { console.log('Oh no! Firebase listUsers Error:', error); }); }
关于服务帐户. json这与您在前端使用react-firebase或npm firebase模块时传递的通常的Firebase配置不同。要在服务器端获得CRUD权限,您似乎需要以下内容:
{ "type": "service_account", "project_id": "my-project-id", "private_key_id": "xxxxxxxxxxxxxxxxxxx", "private_key": "-----BEGIN PRIVATE KEY-----\nMxxxxxxxxxxxxxxzuUA=\n-----END PRIVATE KEY-----\n", "client_email": "firebase-adminsdk-em4gz@my-project-name-email-thing.iam.gserviceaccount.com", "client_id": "0000000000000000000", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-em4gz%40my-proj-name.iam.gserviceaccount.com" }
如果您还没有生成,我可以通过以下方式生成:Firebase控制台=〉项目设置=〉服务帐户=〉生成新私钥
brc7rcf06#
我得到了这个异步版本的工作:(我还没有考虑代码的流程,所以这里使用异步可能在性能方面效率低下......老实说,我只使用异步是因为我不喜欢查看深度嵌套的承诺代码)
const firebase = require('firebase-admin'); const credential = require('./credential.json'); firebase.initializeApp({ credential: firebase.credential.cert(credential) }); let users = []; async function getAllUsers(pageToken) { const results = await firebase.auth().listUsers(1000, pageToken); for (let i = 0; i < results.users.length; i++) { const user = results.users[i]; const {uid, email} = user; users.push({uid, email}); } if (results.pageToken) { getAllUsers(results.pageToken); } }; (async () => { await getAllUsers(); console.log(users); })();
5jvtdoz27#
正如官方文档Firebase Documentation中所述,获取用户列表的方法已经提到,但它一次最多只能列出1000个用户。但如果用户超过1000,我们需要使用自己的逻辑来获取那些剩余的用户。在这里,我尝试使用递归的方法来获取firebase数据库中的完整用户列表。
async getAllUsers(nextPageToken?: String): Promise<any[]> { // List batch of users can be max 1000 at a time. var _users_list = []; await this.firebaseAdmin.auth() .listUsers(100, nextPageToken) .then(async (listUsersResult) => _users_list = listUsersResult.users; console.log("list user page token =>", listUsersResult.pageToken); if (listUsersResult.pageToken) { // List next batch of users. const temp_list = await this.getAllUsers(listUsersResult.pageToken); if (temp_list.length > 0) { _users_list = _users_list.concat(temp_list); } } }) .catch((error) => { console.log('Error listing users:', error); }); return _users_list };
此函数返回在firebase auth中注册的所有用户的列表。
p1iqtdky8#
public async getAllUsers(): Promise<UserRecord[]> { const records: UserRecord[] = []; const listAllUsers = async (maxResults = 1000, nextPageToken?: string): Promise<void> => { const listAllUsersResult = await firebase.auth().listUsers(maxResults, nextPageToken); listAllUsersResult.users.forEach(userRecord => { records.push(userRecord); }); if (listAllUsersResult.pageToken) { await listAllUsers(maxResults, listAllUsersResult.pageToken); } }; await listAllUsers(); return records; }
zysjyyx49#
您还可以使用递归返回所有用户记录(UserRecord[])。
UserRecord[]
import * as FAdmin from 'firebase-admin/lib/auth' export const findUnusedUsers = functions.https.onCall((data, context) => { return listAllUsers().then(allUsers => { return allUsers }) }) const listAllUsers = (nextPageToken?: string, accumulatorUsers: FAdmin.auth.UserRecord[] = []): Promise<FAdmin.auth.UserRecord[]> => { return admin.auth().listUsers(1000, nextPageToken) .then(function(listUsersResult) { const users = [...accumulatorUsers, ...listUsersResult.users] if (listUsersResult.pageToken) { return listAllUsers(listUsersResult.pageToken, users) } else { return users } }) }
9条答案
按热度按时间bgibtngc1#
最新的
firebase-admin sdk
(从现在的5.4.2
版本开始)有listUsers
API可以做到这一点。有一件事要添加到示例中,
nextPageToken
必须被省略或者是有效的userid。(IMO,这在示例和API文档中都不明显。)eblbsuwk2#
原答复:
没有用于从Firebase Admin SDK检索用户列表的公共API。
处理这种情况的典型方法是在Firebase数据库中保留一个相关用户信息的列表。更多信息请参见原始问题:How do I return a list of users if I use the Firebase simple username & password authentication
lyfkaqu13#
您可以使用admin SDK中提供的
auth().listUsers()
方法。详细的示例代码可以在这里找到。Firebase Admin SDK文档plicqrtu4#
这不是一个好的解决方案,但您可以使用Firebase CLI导出用户数据并与您的应用程序集成。
授权:导出
firebase身份验证:导出帐户文件--格式=文件格式
https://firebase.google.com/docs/cli/auth
sqserrrh5#
2020年3月,在与文档和各种帖子进行了大量的斗争之后,我找到了以下作品:
关于服务帐户. json
这与您在前端使用react-firebase或npm firebase模块时传递的通常的Firebase配置不同。
要在服务器端获得CRUD权限,您似乎需要以下内容:
如果您还没有生成,我可以通过以下方式生成:
Firebase控制台=〉项目设置=〉服务帐户=〉生成新私钥
brc7rcf06#
我得到了这个异步版本的工作:
(我还没有考虑代码的流程,所以这里使用异步可能在性能方面效率低下......老实说,我只使用异步是因为我不喜欢查看深度嵌套的承诺代码)
5jvtdoz27#
正如官方文档Firebase Documentation中所述,获取用户列表的方法已经提到,但它一次最多只能列出1000个用户。但如果用户超过1000,我们需要使用自己的逻辑来获取那些剩余的用户。
在这里,我尝试使用递归的方法来获取firebase数据库中的完整用户列表。
此函数返回在firebase auth中注册的所有用户的列表。
p1iqtdky8#
zysjyyx49#
您还可以使用递归返回所有用户记录(
UserRecord[]
)。