Firebase auth user.getIdToken()发送过期的令牌

时间:2019-11-21 06:37:48

标签: javascript firebase firebase-authentication axios firebase-admin

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

0 个答案:

没有答案