我目前正在开发一个 Next.js (React) 项目,我使用 Firebase Auth 进行身份验证。我使用它连接到 REST API 后端,该后端接收 Firebase 提供的用户 token (通过 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 )。
我明白为什么在使用 SSR 时,因为
getIdToken()
不能在那里调用。但我的应用程序只使用客户端数据获取。放弃目前使用 cookie 的方法对我有什么好处吗?
最佳答案
Firebase 身份验证 SDK 已将 token 缓存在本地存储中,因此您无需再次将其缓存在其他地方。
实际上, token 每小时刷新一次,Firebase Authentication SDK 会在后台自动刷新它。如果您自己缓存 token ,您最终可能会使用过时的 token 。
所以我建议总是调用getIdToken()
当您需要 ID token 时。当然,可以将它存储在一个变量中,并在单个代码块中使用它(几乎同时运行的代码)。
使用 cookie 将 token 传递给您的服务器很好,使用 Authorization
也是如此。就像你现在做的那样。后者更常见,但 cookie 也可以。
关于reactjs - Firebase 身份验证 : getIdToken on every fetch or set cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62573086/