Node.js 从Firebase VerifyToken获取用户显示名称

Node.js 从Firebase VerifyToken获取用户显示名称,node.js,firebase,firebase-authentication,firebase-admin,Node.js,Firebase,Firebase Authentication,Firebase Admin,我有一个自定义后端,客户端向其发送登录firebase令牌,服务器验证该令牌并获取解码的令牌。在大多数情况下,它包含足够的信息,但我需要用户的显示名,以便与其他客户端同步,但我可以通过调用admin.auth().getuser(uid)来实现这一点我想避免打额外的电话,而只是为了得到显示名称而进行其他往返。 也许我想得太多了,但有没有办法在使用verifyToken的单个调用中实现这一点?正如您从API文档中看到的,返回一个对象。就我所见,它没有显示名称字段-它不是ID令牌有效负载的一部分,但

我有一个自定义后端,客户端向其发送登录firebase令牌,服务器验证该令牌并获取解码的令牌。在大多数情况下,它包含足够的信息,但我需要用户的显示名,以便与其他客户端同步,但我可以通过调用
admin.auth().getuser(uid)来实现这一点
我想避免打额外的电话,而只是为了得到显示名称而进行其他往返。

也许我想得太多了,但有没有办法在使用verifyToken的单个调用中实现这一点?

正如您从API文档中看到的,返回一个对象。就我所见,它没有显示名称字段-它不是ID令牌有效负载的一部分,但是,返回一个对象,该对象具有一个属性


由于它是一个可选字段,您应该首先检查它是否未定义,并确定在这种情况下要显示什么。

我认为最好的方法是在客户端获取用户配置文件,并将显示名称与Firebase令牌一起发送。正如@Doug所强调的,显示名称没有字段,我提出这个问题的目的是避免服务器端额外的带宽计费。这种方法正是这样做的。

再说一次,我可能是想得太多了,但不知怎么的,我痴迷于一切都是完美的

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
  });

name
属性仅在用户使用公开该信息的提供商(如google auth)登录时才存在。

DecodedIdToken应具有一个
name
属性,该属性应提供用户的显示名称。尝试类似于
decodedIdToken['name']
的方法。一个更漂亮、更可靠的方法,可能是添加X-Header,但这次我必须使用Hiranya的解决方案,尽管没有记录。是的,它实际上返回了名称,即使我使用
CreateUserWithEmailAndPassword
并更新我的显示,谢谢伙计:)