【问题标题】:Is there any way to get Firebase Auth User UID?有什么方法可以获取 Firebase Auth 用户 UID?
【发布时间】:2026-01-15 09:05:01
【问题描述】:

我希望通过 NodeJS 或 Javascript API 从 Firebase 获取 Auth User(s) UID。 我已经附上了它的截图,这样你就会知道我在找什么。

希望你们帮我解决这个问题。

【问题讨论】:

  • 你要根据什么来检索它?认证用户?用户邮箱?请,更多细节..
  • 任何用户的 UID,还是经过身份验证的用户?
  • 基本上,我需要通过Firebase.auth().createCustomToken(UID)从UID生成令牌,以使用以下函数firebase.auth().signInWithCustomToken(token)在firebase上登录用户。
  • 你是在服务器还是客户端获取uid?

标签: javascript node.js api firebase firebase-authentication


【解决方案1】:

身份验证数据在 Firebase 3 中是异步的。因此您需要等待事件,然后您才能访问当前登录用户的 UID。你将无法得到其他人。应用打开时也会调用它。

如果您愿意,您也可以只在收到事件后渲染您的应用,以避免在其中确定事件是否已触发的额外逻辑。

您还可以根据user 的存在从此处触发路线更改,这与加载路线前的检查相结合是确保只有合适的人查看publicOnly 或privateOnly 页面的可靠方法。

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User logged in already or has just logged in.
    console.log(user.uid);
  } else {
    // User not logged in or has just logged out.
  }
});

在您的应用中,您可以保存此用户对象,也可以随时使用firebase.auth().currentUser 获取当前用户。

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onAuthStateChanged

【讨论】:

  • 但我需要 UID 才能登录用户。
  • 我不确定你的意思,这会给你登录用户的 UID。无法获取他人的 UID。
  • 这个方法对我来说根本没有触发。
  • 这不是解决问题的办法
  • @PiyushBansal (大部分是错误命名的)“uid”是任何值,在这种情况下可能来自用户输入,例如登录表单。它不是 Firebase 用户 uid。所以在这种情况下,它可能是您要登录的用户名。请参阅下面的更长答案。
【解决方案2】:

如果用户已登录,则 console.log 将打印出来:

if (firebase.auth().currentUser !== null) 
        console.log("user id: " + firebase.auth().currentUser.uid);

【讨论】:

  • 我遇到了一个问题,即在页面加载时无法立即使用。回调方法(onAuthStateChanged)对我有用。
【解决方案3】:

在服务器端,您可以使用 firebase admin sdk 获取所有用户信息:

const admin = require('firebase-admin')
var serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://yourprojecturl.firebaseio.com",
});

admin.auth().listUsers().then(data=>{
    console.log(data.users)
})

【讨论】:

    【解决方案4】:

    这是一个老问题,但我相信接受的答案为不同问题提供了正确答案;虽然answer from Dipanjan Panja 似乎回答了最初的问题,但原始海报后来在回复中用不同的问题澄清了:

    基本上,我需要通过 Firebase.auth().createCustomToken(UID) 从 UID 生成令牌,以便使用以下函数 firebase.auth().signInWithCustomToken(token) 在 firebase 上登录用户。

    因为最初的问题已澄清,意图是使用 createCustomTokensignInWithCustomToken,我相信这是一个关于使用 Firebase Admin SDKFirebase Functions(两者都是服务器端)提供自定义身份验证的问题,可能基于用户名和密码组合,而不是使用电子邮件地址和密码。

    我还认为这里的“uid”存在一些混淆,在下面的代码示例中,它不是指用户的 Firebase uid,而是在文档中为createCustomToken 指示的uid,它显示:

    admin
      .auth()
      .createCustomToken(uid)
      .then((customToken) => {
        ...
    

    在这种情况下,createCustomToken 调用上的 uid 参数不是 Firebase uid 字段(尚不为人所知),因此向提出此问题的编码人员提供了一系列令人沮丧的答复。

    相反,这里的uid 指的是任何用于登录的任意基础,此自定义 身份验证将支持该基础。 (例如,它也可以是电子邮件地址、社会保险号、员工编号等任何东西......)

    如果您从文档页面查看上方该短代码块,您会看到在这种情况下uid 被定义为:

    const uid = 'some-uid';
    

    同样,这可以表示自定义身份验证想要的任何内容,但在这种情况下,我们假设它是 username/userid 与密码配对。所以它的值可能是 'admin''appurist''123456' 或其他值。

    答案:所以在这种情况下,这个特定的uid(命名错误)可能来自用户输入,在登录表单上,这就是它可用的原因在(之前)登录时间。如果您知道谁在尝试登录,则一些 Admin SDK 代码代码会在所有用户中搜索匹配字段(存储在新用户注册时)。

    似乎所有这一切都是为了绕过 Firebase 确实支持 signInWithUsernameAndPassword(任意用户 ID/用户名)甚至 signInWithUidAndPassword(Firebase UID)这一事实。所以我们需要 Admin SDK 变通方法,或者 Firebase 函数,而 Firebase 的无服务器方面被严重削弱了。

    关于自定义身份验证令牌主题的 6 分钟视频,我强烈推荐 Jen Person 的 Firebase YouTube 视频: Minting Custom Tokens with the Admin SDK for Node.js - Firecasts

    【讨论】:

      【解决方案5】:

      目前在 Firebase 控制台中,没有直接的 API 来获取用户列表,即 Auth User(s) UID。
      但是在您的 Firebase 数据库中,您可以在用户级别维护用户 UID。如下,

      "users": {
        "user-1": {
          "uid": "abcd..",
          ....
        },
        "user-2": {
          "uid": "abcd..",
          ....
        },
        "user-3": {
          "uid": "abcd..",
          ....
        }
      }
      

      然后,您可以在需要 uid 时进行查询并检索它。
      希望这个简单的解决方案可以帮到你!

      【讨论】:

      • 基本上,我需要通过Firebase.auth().createCustomToken(UID)从UID生成令牌,以便使用以下函数firebase.auth().signInWithCustomToken(token)在firebase上登录用户。还有其他方法可以在 firebase 上登录用户吗?
      • Firebase 让身份验证变得简单。它具有内置的电子邮件和密码功能,以及 Facebook、Twitter、GitHub 和 Google 等第三方提供商。借助 Firebase custom Authentication API,您也可以与现有的登录服务器集成。
      • 欲了解更多信息,请阅读这些文章,希望对您有所帮助,Link-1Link-2
      【解决方案6】:

      从 Firebase 文档中,使用 Firebase.getAuth():

      var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
      var authData = ref.getAuth();
      
      if (authData) {
        console.log("Authenticated user with uid:", authData.uid);
      }
      

      来源:

      【讨论】:

      • 如果我试一试,authdata.uid 属于哪个用户?问题是我需要 UID 才能在 firebase 上登录用户并且没有身份验证,我怎样才能获得正确的 UID。
      • 我相信这属于当前经过身份验证的用户,这可以很容易地通过数据库确认..
      最近更新 更多