从 Firebase VerifyToken 获取用户显示名称

Get User Display Name from Firebase VerifyToken

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

正如您从 API 文档中看到的那样,verifyIdToken() returns a DecodedIdToken object. As far as I can see, it has no field for display name - it's not part of the payload of the ID token. getUser(), however returns a UserRecord object, and that has a displayName 属性。

因为它是一个可选字段,你应该先检查它是否未定义,然后弄清楚在这种情况下你想显示什么。

我认为最好的方法是在客户端获取用户配置文件并将显示名称与 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)登录时出现。