【问题标题】:How to get the ID token from FirebaseAuth如何从 FirebaseAuth 获取 ID 令牌
【发布时间】:2018-01-15 17:29:00
【问题描述】:

我正在从我的 firebase 数据库中读取一些 Json 文件,并尝试获取当前用户的 ID 令牌,以便在标头中使用,如下所示:

 var response = await httpClient.get(url,headers: {'Authorization':"Bearer ${FirebaseAuth.instance.currentUser.getToken()}"});

当我执行上一行时,它似乎没有获得正确的令牌,因为我无法访问数据库,但是,当我在字符串中手动包含 ID 令牌时,我的应用程序按预期工作。我到底做错了什么?

【问题讨论】:

  • Aziza,你知道公钥(用于验证)多久更改一次吗?谢谢

标签: firebase dart firebase-authentication flutter


【解决方案1】:

getIdToken() 返回一个Future - 你必须await 它才能真正获得令牌字符串:

var token = await FirebaseAuth.instance.currentUser().getIdToken();
var response = await httpClient.get(url,headers: {'Authorization':"Bearer $token"});

【讨论】:

  • 似乎 currentUser.getToken() 已被弃用。
  • 酷,还有其他选择吗?
  • 这个 getIdToken() 方法似乎不适用于当前的flutter firebase_auth。???
  • 您找到获取令牌的方法了吗?似乎 getIdToken() 和 getToken() 不适用于 firebase_auth
【解决方案2】:

我认为 Flutter 有 bug。

现在调用getIdToken()方法你需要这样做:

FirebaseUser user = await FirebaseAuth.instance.currentUser();

String token;

user.getIdToken().then((result) {

    token = result.token;
});

你不能打电话给FirebaseAuth.instance.currentUser().getIdToken()

【讨论】:

  • 这是经过大量试验和错误后对我有用的解决方案。但是我必须在 user.getIdToken() 之前添加 await ....
  • @DeependraSolanky 您不能在同一操作中使用 await 和 .then() 。这违反了编程原则。 await 的正确解决方案是String token = await user.getIdToken().token
【解决方案3】:

U 也可以像这样从窗口对象中检索 id 令牌:

const idToken = window.gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token

【讨论】:

    【解决方案4】:

    如果你正在使用

    import auth from '@react-native-firebase/auth';
    

    然后你可以访问令牌

    var token = await response.user.getIdToken();
    console.log('TokenID', token);
    

    然后,你可以使用它进入

    var response = await httpClient.get(url,headers: {'Authorization':"Bearer $token"});
    

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2020-05-05
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多