【发布时间】:2018-07-14 08:22:08
【问题描述】:
问题
从以下情况,我可以看到两种不同的标记:
- 完成注册后,我获得了第一个 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 令牌似乎不包含用户的 displayName 和 photoURL。
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));
}
注意:退出并成功登录应用后,token的长度会比之前的token长很多。此外,它还包含displayName 和photoURL。
我也发布了我的相关问题here,似乎是令牌导致了问题。
为什么我会得到一个新的令牌?我该如何解决这个问题?
【问题讨论】:
-
您没有提供全部信息。目前尚不清楚您如何注销用户。那篇文章可以阐明这个问题。 Firebase Auth 等待状态得到解决,然后再注销用户。这确保没有竞争条件(在确定初始状态后完成退出)。我推测这就是原因。
-
我认为您没有正确回答我的问题。在我手动退出应用程序然后再次登录应用程序后,令牌已更改。因此,我相信退出用户不是问题。
-
我认为即使调用
initializeUserProfile(),状态也不会更新。 -
登录用户将返回一个新会话,其中包含一个具有完整生命周期的新 ID 令牌。不知道这里有什么问题。
-
@bojeil 如何在用户配置文件更新时使用新的 ID 令牌获取新会话?调用
initializeUserProfile()方法后。有什么想法吗?
标签: javascript firebase firebase-authentication jwt