繁体   English   中英

为 Node.js 客户端应用程序保留 Firebase 用户

[英]Persist Firebase user for Node.js client application

我正在构建一个 Node.js 命令行界面 (CLI),使用 Firebase 对后端进行身份验证。 我想避免让用户在每次运行命令时都输入密码。 相反,我想实现一个“登录”流程,该流程将凭证持久保存到文件系统,该凭证可用于后续的无密码身份验证,直到用户“注销”为止。

基本上我正在寻找的是firebase JavaScript SDK 的“auth state persistence”功能。 不幸的是,Node.js 不支持该功能; 使用'local''session'作为模式调用setPersistence会引发错误“当前环境不支持指定的持久性类型。”

“自己”实现该功能的最简单方法是什么?

我研究了 SDK 如何将用户持久保存在浏览器中,基本上它将用户对象字符串化并将其存储在本地存储中。 我可以在 Node.js 中自己轻松地对用户对象进行字符串化(该实例具有toJSON方法),但我无法弄清楚稍后如何将字符串反序列化为firebase.User的实例。 在源代码中看到这个函数,看起来它可以解决问题。 但这并没有在 SDK AFAIK 上公开。

您可以从序列化的用户对象实例化firebase.User类:

保存用户

const userJson = JSON.stringify(currentUser.toJSON())
// Write userJson to disk

加载用户

// Read userJson from disk
const userData = JSON.parse(userJson)
const user = new firebase.User(userData, userData.stsTokenManager, userData)
firebase.auth().updateCurrentUser(user)

来源: https ://github.com/firebase/firebase-js-sdk/issues/1874#issuecomment-549085119

在需要令牌的 CLI 应用程序中,这些令牌通常存储在本地机器的某个位置(通常在 Linux 机器的主目录中的“点”文件中 - 例如~/.yourapp/config

这些文件可以是你想要的任何格式,但我喜欢 JSON 或 YAML 来存储这样的东西。

就用户对象而言,您可以使用 Node.js 内置的JSON.parse(yourStringUser)轻松加载字符串。

firebase-js-sdk 源代码中,您可以找到对会话存储执行类似操作的参考资料; 使用toJSON()方法设置某个key并使用JSON.parse()方法检索该值。

服务工作者的会话管理

最终用户将在本地安装 Node.js - 并且您想要构建一个交互式 Node 脚本/应用程序,这需要客户端/令牌访问 Firebase。

Firebase Auth 提供了使用服务工作者检测和传递 Firebase ID 令牌以进行会话管理的能力。

如果您查看 Firebase CLI 本身的工作原理,用户会通过 Web 浏览器登录,然后将授权代码粘贴到 Firebase CLI ( firebase login --no localhost )。 然后,用户登录。因此,使用浏览器和 Firebase Web SDK 来收集凭据。

我在 Google Cloud Platform 支持下对此进行了详尽的探索,我们确定这在当前的 SDK 中是不可能的。 FWIW,使用 AWS Cognito 只花了我几个小时就实现了这个功能。 CognitoUser 构造函数允许用户传递他们最喜欢的 localStorage API 的 Node.js 实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM