从 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)登录时出现。
我有一个自定义后端,客户端向其发送登录 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)登录时出现。