【问题标题】:How to get user ID token changes from Firebase Auth on Flutter如何从 Flutter 上的 Firebase Auth 获取用户 ID 令牌更改
【发布时间】:2021-04-04 16:42:59
【问题描述】:

我正在使用 Firebase Auth 开发 Flutter 应用程序,对于后端 AdonisJS,我已经创建了注册/登录方法,我遇到的问题/老兄是 firebase auth 令牌在 1 小时后过期而我没有'不知道获取新令牌以将其发送到后端以了解它是否授权给 REST API 的用户的正确方法。

我知道我可以使用

await _firebaseAuth.currentUser.getIdToken()

但是我应该如何检查令牌是否过期,如果是,如何要求新的? 每次我要使用我的 REST API 时,是否有类似守护进程的东西来检查它

非常感谢您的帮助,我对 Firebase 和 Flutter 还很陌生

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    使用 firebase,无需存储令牌并手动管理它。 Web API 已经为您管理会话,并在授权或登录状态发生更改时通知您。

    You can see how to implement that last mentioned listener here

    如果您需要验证令牌在您的后端是否有效,Node admin SDK 中有一个部分可以检查令牌。

    最后,要检索最新的可能令牌,您可以使用您提到的方法,如下所示:

    firebase.auth().currentUser.getIdToken(/* forceRefresh */ true)

    【讨论】:

    • 那么,我应该如何将令牌发送到我的后端?因为在后面我检查令牌是否有效
    • 您可以使用firebase的[node admin SDK] (firebase.google.com/docs/auth/admin/verify-id-tokens)检查令牌是否有效
    • 我忘了说,如果要强制刷新token,可以加firebase.auth().currentUser.getIdToken(/* forceRefresh */ true)
    • @FabioLopez 这可能值得对您的答案进行编辑,因为它可能是 OP 正在寻找的。​​span>
    【解决方案2】:

    如果您希望在 Firebase Auth SDK 每小时自动刷新时更新 ID 令牌,documentation 简要说明了如何执行此操作:

    如果您需要身份验证状态更改事件以及任何用户令牌刷新事件,您可以改为通过idTokenChanges() 方法订阅。

    它的工作方式类似于该文本上方提供的代码中的authStateChanges() 流。它看起来像这样:

    FirebaseAuth.instance
      .idTokenChanges()
      .listen((User user) {
        if (user == null) {
          print('User is currently signed out!');
        } else {
          user.getIdToken().then((String token) {
            print('The user ID token is' + token);
          })
        }
      });
    

    您可以在全局范围内存储令牌并尽可能多地使用它。假设此流不断将新令牌放入该全局空间中,那么重用它应该没有任何问题。

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 2021-01-05
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2023-01-09
      • 1970-01-01
      相关资源
      最近更新 更多