【问题标题】:Firebase tokens expiration and best practice for handling refresh tokensFirebase 令牌过期和处理刷新令牌的最佳实践
【发布时间】:2019-03-23 14:45:52
【问题描述】:

我目前在客户端应用程序(基于 Cordova 的移动应用程序)上使用 Firebase,使用客户端上的 firebase 用户身份验证方法:

  • signInWithEmailAndPassword
  • FacebookAuthProvider

根据我目前对即将到期的会话的理解和经验:

“身份验证会话不会因 Firebase 登录而过期。但 ID 令牌必须每小时刷新一次,以保持对服务的访问。”

我认为这意味着我应该只编写一个每 59 分钟运行一次的后台进程方法并运行 firebase 方法:

firebase.auth().currentUser.getIdToken(true) // true 表示根据 firebase 文档强制刷新,不管当前令牌是否过期。

我只是想确保我已经对此有所了解。

我会用这样简单的东西......这应该可以解决问题:

  let firebaseTokenRefresh = setInterval(function(){
     console.log('running firebase token refresh...');
     // true = forceRefresh
     firebase.auth().currentUser.getIdToken(true); 
  }, 3540000); // 59 minutes firebase token refresh (1 hr expiration)

谢谢。

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    无需主动刷新令牌(这样做成本太高)。任何时候您需要 ID 令牌,您只需致电 user.getIdToken()。如果当前令牌已过期,这将返回缓存的未过期令牌或刷新它。您可以在向服务器发送经过身份验证的请求时调用它。 如果您使用的是 Firestore 或 Realtime 数据库,他们会在需要时随时为您自动刷新令牌。您可以通过auth.onIdTokenChanged() listener 收听令牌更新。

    【讨论】:

    • 那不正确,它们确实会在 1 小时后过期,如果您使用 getIdToken 的结果并将令牌存储在 prefs 中,这样您就可以在需要请求时将其发送到您的 API,发送相同的令牌1 小时后发送给他们而不先刷新它,将导致他们的 firebase 调用返回“过期令牌”,因此他们将返回 401 Unauthorized 给您。
    • 它们当然会过期。它们是具有过期时间的 JWT。阅读答案。您不会将它们存储在本地。它们已经为您存储和管理。需要时调用官方 API。它会为您刷新它们。
    • 请任何链接
    • 那么,如何获取自定义过期时间的token呢?
    猜你喜欢
    • 2020-11-09
    • 2019-09-09
    • 2015-05-24
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多