首页 > 解决方案 > Firebase 授权持久性和 API 调用的最佳实践

问题描述

我一直在学习使用 firebase、react 和 redux 构建全栈网站的教程。登录向后端函数发送调用,该函数使用 firebase.auth().signInWithEmailAndPassword 进行登录。IdToken 被传回客户端并存储在本地存储中。然后,身份验证和状态持久性依赖于客户端检查当前日期是否超过了 JWT 令牌的到期时间。对后端云函数的 API 调用也需要使用“Bearer {IdToken}”的授权标头。

这种结构让我很头疼。我做了很多阅读,我目前的理解是,firebase 有它自己的授权持久性(?),我可以直接在我的前端实现。然后使用侦听器,我可以在身份验证状态更改时自动获取新的 Id 令牌。这将解决我的令牌每小时到期的问题。从我所读到的令牌的本地存储也是一个安全风险。

我不确定这会如何影响我的函数调用的授权。我应该仍然使用授权标头还是有更优雅的 firebase 方式来做到这一点?

标签: firebasegoogle-cloud-firestorefirebase-authentication

解决方案


如果您使用 Firebase 身份验证的内置提供程序,它们确实会自动将登录信息信息保存在大多数客户端上,在重新启动时恢复它,并在 ID 令牌到期之前刷新它。

因此,如果您使用标准提供程序之一,您只需获取用户的 ID 令牌,然后将其传递给您的云函数。

您甚至可以使用Callable Cloud Functions跳过该步骤。对于这些,Firebase Functions SDK 会自动传递 ID 令牌,服务器会自动对其进行解码和验证,并将其作为context.auth.


推荐阅读