我有一个自定义的后端,客户端发送登录火库令牌,服务器验证并获得解码令牌,大部分信息已经足够,但我需要用户的显示名称,以便与其他客户端同步。admin.auth().getuser(uid)
我想避免为了获取显示名称而进行额外的调用和其他往返。 也许我想得太多了,但是有没有办法用verifyToken在一次调用中得到呢?
DecodedIdToken
有许多没有明确列出的可选属性。你可以通过处理 DecodedIdToken
作为地图。以下是我的预期工作。
const admin = require('firebase-admin');
admin.initializeApp({
projectId: '...',
})
const token = '....';
admin.auth().verifyIdToken(token)
.then((decodedIdToken) => {
console.log(decodedIdToken.name); // Get user's display name
// decodedIdToken['name'] if you're on TypeScript
});
The name
属性只有在用户使用暴露该信息的提供者(如google auth)登录时才会出现。
正如你从API文档中可以看到的那样。验证IDToken() 返回一个 DecodedIdToken 对象的一部分。 就我所见,它没有显示名称的字段--它不是 ID token 的有效载荷的一部分。getUser()然而,返回的是一个 用户记录 对象,并且该对象有一个 显示名称 属性。
因为这是一个可选的字段,你应该先检查它是否是未定义的,然后想出在这种情况下你想显示什么。
我认为最好的方法是在客户端获取用户配置文件,然后将显示名称和Firebase Token一起发送。正如@Doug所强调的那样,没有显示名称的字段,而我提出这个问题的目的是为了避免在服务器端产生额外的带宽费用,这种方法恰恰做到了这一点。 同样,我可能是 多虑 但不知怎的,我却迷恋上了一切完美的东西!