有啥方法可以获取 Firebase Auth 用户 UID?

Posted

技术标签:

【中文标题】有啥方法可以获取 Firebase Auth 用户 UID?【英文标题】:Is there any way to get Firebase Auth User UID?有什么方法可以获取 Firebase Auth 用户 UID? 【发布时间】:2016-11-16 02:32:25 【问题描述】:

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

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

【问题讨论】:

你要根据什么来检索它?认证用户?用户邮箱?请,更多细节.. 任何用户的 UID,还是经过身份验证的用户? 基本上,我需要通过Firebase.auth().createCustomToken(UID)从UID生成令牌,以使用以下函数firebase.auth().signInWithCustomToken(token)在firebase上登录用户。 你是在服务器还是客户端获取uid? 【参考方案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-1 和 Link-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);

来源:

Firebase.getAuth()

【讨论】:

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

以上是关于有啥方法可以获取 Firebase Auth 用户 UID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中从 Firebase Auth 获取用户 ID?

如何从 firebase_auth 获取令牌

Firebase Auth:我想获取当前用户个人资料照片并将其上传到 Firebase 数据库或存储

有啥方法可以获取 firebase 请求的状态吗?

从当前用户 firebase swift 获取文档

Firebase 规则如何获取“request.auth.uid”字段?