这是一个老问题,但我相信接受的答案为不同问题提供了正确答案;虽然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