据我所知,默认情况下,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方法。我有点迷茫,为什么我的服务器继续抱怨过期的令牌,将不胜感激。