javascript - Firebase auth user.getIdToken() 发送过期令牌
问题描述
据我所知, getIdToken() 默认情况下应该向服务器发送一个未过期的令牌,在内部处理令牌刷新。但是,我的服务器收到了很多关于过期令牌的错误。
在我的前端,我创建了 axios 实例,如下所示:
const base = axios.create({
baseURL: apiUrl,
});
base.interceptors.request.use(async (config) => {
const token = await getAccessToken();
config.headers.Authorization = `Bearer ${token}`;
return config;
});
const getAccessToken = async () => {
const user = firebase.auth().currentUser;
if (user) {
const token = await user.getIdToken();
return token;
}
return null;
};
然后在接收服务器上,我通过执行以下操作验证令牌:
const admin = require("firebase-admin");
const auths = req.headers.authorization.split(" ");
admin.auth().verifyIdToken(auths[1]).then(async token => {
...
});
我从服务器收到的错误是:
Error: Firebase ID token has expired. Get a fresh ID token from your client app and try again (auth/id-token-expired). See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.
如果我更改getIdToken()
为getIdToken(true)
,问题就会消失。
我验证了每个请求都会调用 getAccessToken 方法。我有点迷失为什么我的服务器继续抱怨过期的令牌,任何帮助将不胜感激。
解决方案
推荐阅读
- executorservice - 在静态块中使用 ExecutorService 提交 Callable
- vba - 查找和替换时将字符串中的第二个字符大写?
- android - 我们如何从 java 类中向下拉菜单中添加更多项目
- jquery - 为什么数据表使用“.row().remove()”删除其中一行,但多行已被删除?
- python - Dockerfile scrapy 未知命令: crawl
- python - 如何计算3D中两点之间的距离?
- linux - 安排 cronjob 每周将文件复制到不同的位置
- php - 将缩略图图像保存到另一个文件夹 [CodeIgniter]
- python - 试图让 AI 正确调用文本文件中的集合名称
- javascript - 如何在 html 上加载加载器,直到使用 angularjs 加载所有图像?