首页 > 解决方案 > 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 方法。我有点迷失为什么我的服务器继续抱怨过期的令牌,任何帮助将不胜感激。

标签: javascriptfirebasefirebase-authenticationaxiosfirebase-admin

解决方案


推荐阅读