我目前正在做一个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)。
我可以理解为什么使用SSR时,因为getIdToken()
不能在那里调用。但我的应用程序只使用客户端数据获取。如果我放弃目前使用cookie的方法,会有什么好处吗?
2条答案
按热度按时间kuhbmx9i1#
Firebase身份验证SDK已将令牌缓存在本地存储中,因此您无需再次将其缓存在其他位置。
事实上,令牌每小时刷新一次,Firebase Authentication SDK会在后台自动刷新它。如果您自己缓存令牌,则可能最终使用的是过时的令牌。
因此,我建议在需要ID令牌时始终调用
getIdToken()
。当然,可以将其存储在变量中,并在单个代码块(几乎同时运行的代码)中使用它。使用cookie将令牌传递给服务器是可以的,就像您现在使用的
Authorization
头一样。后者更常见,但cookie也有效。nszi6y052#
在cookie或本地存储中设置身份验证令牌:
在身份验证期间获得Auth令牌后,您可以将其存储在cookie或本地存储中。当您需要使用服务器端呈现(SSR)请求发送Auth令牌时,最好使用cookie,而本地存储对于仅限客户端的应用程序是一个很好的选择。
下面是在cookie中设置Auth令牌的示例:
字符串