Firebase:为什么我两次获得Firebase ID令牌?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase:为什么我两次获得Firebase ID令牌?相关的知识,希望对你有一定的参考价值。

Question

从以下情况中,我可以看到两个不同的标记:

  • 完成注册后,我会获得第一个Firebase ID令牌。
  • 当我完全退出后回到我的应用程序时,我正在获得一个新的JWT。

What I've found

const app = express();

app.use((req, res, next) => {
  if (!req.headers.authorization) 
    return res.status(403).json({ message: 'Missing Authorization Header' });

  const jwt = req.headers.authorization.trim();

  return admin.auth().verifyIdToken(jwt).then((decodedToken) => {
    const uid = decodedToken.uid; // Exists
    const displayName = decodedToken.name; // No displayName, object Undefined
    const photoURL = decodedToken.picture; // No photoURL, object Undefined
    next();
  });
});

即使我通过调用下面的函数更新了用户的默认配置文件,似乎ID令牌不包含用户的displayNamephotoURL

initializeUserProfile(name: string, photoURL: string) {
  let data = {
    displayName: name,
    photoURL: photoURL
  };

  this.afAuth.auth.currentUser.updateProfile(data).then(() => {
    this.getUsersRef(this.currentUserId).update(data); // Save data to firestore
  }).catch((err) => console.log(err));
}

注意:注销并成功登录应用程序后,令牌的长度比前一个令牌长得多。此外,它确实包含displayNamephotoURL

我还发布了我的相关问题here,似乎令牌导致问题。

我为什么要获得新令牌?我该如何解决这个问题?

答案

要在通过updateProfile更新配置文件后获取具有最新声明的新ID令牌,您只需通过调用:currentUser.getIdToken(true)强制令牌刷新。

请注意,当令牌过期时,令牌刷新时,新令牌会自动获取带有配置文件更改的最新声明。要立即获得此功能,您可以强制刷新。

以上是关于Firebase:为什么我两次获得Firebase ID令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 存储 API 触发两次

Firebase Android onAuthStateChanged 调用了两次

必须点击登录按钮两次;使用 vue-router 和 firebase 身份验证

Firebase 存储数据显示两次

具有两次 orderByChild 条件的 Firebase 查询 [重复]

Firebase 云函数调用了两次