Firebase 身份验证:每次获取或设置 cookie 时都有 getIdToken?

Posted

技术标签:

【中文标题】Firebase 身份验证:每次获取或设置 cookie 时都有 getIdToken?【英文标题】:Firebase Auth: getIdToken on every fetch or set cookie? 【发布时间】:2020-10-15 18:39:06 【问题描述】:

我目前正在开发一个 Next.js (React) 项目,我使用 Firebase Auth 进行身份验证。我使用它连接到 REST API 后端,该后端接收 Firebase 提供的用户令牌(通过 getIdToken())。

由于 IdToken 时常变化,我目前在发送 fetch 请求之前请求最新的 IdToken:

  const fetcher = (url: string) => 
      return user.getIdToken().then((token) =>
        fetch(url, 
          method: "GET",
          headers: new Headers(
            "Content-Type": "application/json",
            Authorization: `Bearer $token`,
          ),
        ).then((res) => res.json())
      );
  ;

此设置确实有效,但我想知道它是否被认为是有效/最佳实践? 我看到很多使用 IdToken 设置 cookie 的示例(例如,firebase docs、next.js example)。

我明白为什么在使用 s-s-r 时,因为不能在那里调用 getIdToken()。但我的应用程序只使用客户端数据获取。放弃目前使用 cookie 的方法对我有什么好处吗?

【问题讨论】:

【参考方案1】:

Firebase 身份验证 SDK 已将令牌缓存在本地存储中,因此您无需再次将其缓存在其他地方。

实际上,令牌每小时刷新一次,Firebase Authentication SDK 会在后台自动刷新一次。如果您自己缓存令牌,您最终可能会使用过时的令牌。

因此,我建议您在需要 ID 令牌时始终致电 getIdToken()。当然可以将它存储在一个变量中,并在单个代码块中使用它(几乎同时运行的代码)。

使用 cookie 将令牌传递给您的服务器很好,就像现在使用 Authorization 标头一样。后者更常见,但 cookie 也可以。

【讨论】:

“Firebase 身份验证 SDK 已将令牌缓存在本地存储中”--如果提供相关文档的链接,将不胜感激。

以上是关于Firebase 身份验证:每次获取或设置 cookie 时都有 getIdToken?的主要内容,如果未能解决你的问题,请参考以下文章

React Native - Firebase 身份验证持久性不起作用

如何从 Firebase 数据库中获取经过身份验证的用户?

使用 php 设置 firebase v3 自定义身份验证

Flutter Firebase 身份验证和/或登录不成功

Twitter 身份验证的 Firebase cookie 问题

firebase 身份验证超时