【问题标题】:How can I list all users using firebase admin sdk如何使用 firebase admin sdk 列出所有用户
【发布时间】:2017-04-22 01:33:32
【问题描述】:

有没有办法列出所有使用 firebase admin sdk 的用户?文档仅显示通过 uid 或电子邮件获取一位用户。

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin


    【解决方案1】:

    最新的firebase-admin sdk(截至目前版本5.4.2)有listUsers API 可以做到这一点。示例为here

    要添加到示例中,nextPageToken 必须省略或有效的用户 ID。 (IMO,在示例或 API 文档中都不明显。)

    【讨论】:

    • 对 nextPageToken 的好评。如此真实。
    【解决方案2】:

    更新正如@Webp 在他们的回答中所说,Admin SDK 中现在有一个 API to list all users

    原答案:

    没有用于从 Firebase Admin SDK 检索用户列表的公共 API。

    处理这种情况的典型方法是在 Firebase 数据库中保留相关用户信息的列表。有关更多信息,请参阅此原始问题:How do I return a list of users if I use the Firebase simple username & password authentication

    【讨论】:

      【解决方案3】:

      您可以使用 admin sdk 中提供的auth().listUsers() 方法。详细的示例代码可以在这里找到。 Firebase Admin SDK Documentation

      【讨论】:

        【解决方案4】:

        这不是一个好的解决方案,但您可以使用 Firebase CLI 导出用户数据并与您的应用程序集成。

        身份验证:导出

        firebase auth:export account_file --format=file_format

        https://firebase.google.com/docs/cli/auth

        【讨论】:

        • 这是唯一有效的解决方案,真的很伤心
        【解决方案5】:

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

        重新 serviceAccount.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 控制台 => 项目设置 => 服务帐户 => 生成新私钥

        【讨论】:

          【解决方案6】:

          我得到了这个异步版本:

          (我没有考虑过代码的流程,所以这里使用 async 可能在性能方面效率低下……老实说,我只使用 async 是因为我不喜欢看深度嵌套的 promise 代码)

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-07
            • 2021-09-21
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            相关资源
            最近更新 更多