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

时间:2018-02-04 08:45:06

标签: javascript firebase firebase-authentication jwt

问题

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

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

我发现了什么

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,似乎令牌会导致问题。

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

1 个答案:

答案 0 :(得分:0)

要通过updateProfile更新个人资料后获取包含最新声明的新ID令牌,您只需拨打:currentUser.getIdToken(true)即可强制执行令牌刷新。

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