有啥方法可以获取 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 上登录用户。
因为最初的问题已澄清,意图是使用
createCustomToken
和 signInWithCustomToken
,我相信这是一个关于使用 Firebase Admin SDK 或 Firebase 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?