firebase - Firebase 授权持久性和 API 调用的最佳实践
问题描述
我一直在学习使用 firebase、react 和 redux 构建全栈网站的教程。登录向后端函数发送调用,该函数使用 firebase.auth().signInWithEmailAndPassword 进行登录。IdToken 被传回客户端并存储在本地存储中。然后,身份验证和状态持久性依赖于客户端检查当前日期是否超过了 JWT 令牌的到期时间。对后端云函数的 API 调用也需要使用“Bearer {IdToken}”的授权标头。
这种结构让我很头疼。我做了很多阅读,我目前的理解是,firebase 有它自己的授权持久性(?),我可以直接在我的前端实现。然后使用侦听器,我可以在身份验证状态更改时自动获取新的 Id 令牌。这将解决我的令牌每小时到期的问题。从我所读到的令牌的本地存储也是一个安全风险。
我不确定这会如何影响我的函数调用的授权。我应该仍然使用授权标头还是有更优雅的 firebase 方式来做到这一点?
解决方案
如果您使用 Firebase 身份验证的内置提供程序,它们确实会自动将登录信息信息保存在大多数客户端上,在重新启动时恢复它,并在 ID 令牌到期之前刷新它。
因此,如果您使用标准提供程序之一,您只需获取用户的 ID 令牌,然后将其传递给您的云函数。
您甚至可以使用Callable Cloud Functions跳过该步骤。对于这些,Firebase Functions SDK 会自动传递 ID 令牌,服务器会自动对其进行解码和验证,并将其作为context.auth
.
推荐阅读
- python - PyTorch 中多对多 CNN-LSTM 的输出大小问题
- sublimetext3 - 双击时如何修改 Sublime Text 3 配色方案文件“filename.tmTheme”以将背景颜色应用于匹配文本的所有匹配项?
- flutter - Flutter SingleChildScrollView 不是停在中间而是弹跳到边缘
- node.js - 如何使 Puppeteer 的 waitFor 工作?它以当前形式阻止执行
- javascript - 将 SVG 转换为 PNG 图像缺少填充图像模式
- node.js - 如何使用节点 js 和加密 js 创建最长 34 个字符的公钥
- android - Android:在 ViewBinding 的 ScrollView 中没有可用的视图 ID。如何访问?
- c++ - 我试图运行半嵌套循环并尝试对数组进行半排序,但它似乎不起作用你能告诉我为什么它不起作用
- flutter - 如何使用颤振在列表视图中的每个项目上显示进度条
- sql - 在 Datagridview VB.Net 中添加文本 tpo headercell