在我的服务器上,我在使用 firebase admin sdk 时看到这些错误.verifyIdToken()
Firebase ID 令牌已过期。从您的客户端应用程序获取新令牌并重试
Firebase ID 令牌具有“kid”声明,该声明与已知的公钥不对应。 ID 令牌很可能已过期,因此请从客户端应用程序获取新令牌,然后重试。看https://firebase.google.com/docs/auth/admin/verify-id-tokens https://firebase.google.com/docs/auth/admin/verify-id-tokens有关如何检索 ID 令牌的详细信息。
在客户端,我在浏览器 服务器之间的每个请求之前执行此操作:
firebase.auth().currentUser.getIdToken()
通过阅读文档,我了解到该函数将获得一个有效的、未过期的令牌,因为后台的 SDK 会根据需要自行刷新。我可以选择传递true
使用此函数强制刷新。
为什么会这样getIdToken()
函数似乎正在向我的后端发送过期的令牌?
似乎要解决这个问题我的选择是:
- Pass in
true
每次调用 getIdToken() 时强制刷新。这是不必要的昂贵,因为它会在来自浏览器 我的服务器的请求之前增加来自浏览器 firebase 的整个往返网络请求的开销
- call
getIdToken()
我现在的方式 - 在客户端手动解码令牌,检查过期时间,如果过期则调用getIdToken(true)
再次强制刷新并将新刷新的令牌发送到我的服务器
第二种是推荐/预期的处理方法吗?这里好像出了什么问题……
令牌通常会在一小时后过期。getIdToken
如果令牌过期,将刷新缓存的令牌。确保当您需要将令牌发送到服务器时始终在客户端上调用它。如果您缓存令牌并始终将其发送到后端,那么它会在某个时候过期。
另外,为了以防万一,请确保您的服务器时钟同步。这不太可能,但您的时钟可能由于某种原因不同步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)