我有一个自定义的后端,客户端将登录Firebase令牌发送到该后端,服务器会对其进行验证并获取已解码的令牌,在大多数情况下,该令牌包含足够的信息,但是我需要用户的显示名称进行同步但是,我可以通过致电admin.auth().getuser(uid)
来实现此目的,我想避免进行额外的呼叫,而进行其他往返行程只是为了获得显示名称。
也许我想得太过分了,但是没有办法通过verifyToken在单个调用中得到它吗?
答案 0 :(得分:3)
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
});
仅当用户使用公开该信息的提供程序(例如google auth)登录时,name
属性才存在。
答案 1 :(得分:0)
从API文档中可以看到,verifyIdToken()返回一个DecodedIdToken对象。据我所知,它没有显示名称字段-它不是ID令牌有效负载的一部分。 getUser(),但是返回一个UserRecord对象,并且该对象具有displayName属性。
由于它是一个可选字段,因此应首先检查它是否未定义,并弄清楚在这种情况下要显示的内容。
答案 2 :(得分:0)
我认为最好的方法是在客户端获取用户个人资料,并将显示名称与Firebase令牌一起发送。正如@Doug突出显示的那样,没有显示名称字段,我的这个问题的目的是避免在服务器端进行额外的带宽计费,这种方法正是这样做的。
同样,我可能会思考,但是不知何故我迷恋于一切都是完美的!