如何从 FirebaseAuth 获取 ID 令牌

Posted

技术标签:

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

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

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

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

【问题讨论】:

Aziza,你知道公钥(用于验证)多久更改一次吗?谢谢 【参考方案1】:

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

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

【讨论】:

似乎 currentUser.getToken() 已被弃用。 酷,还有其他选择吗? getIdToken - firebase.google.com/docs/reference/node/… 这个 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");

【讨论】:

以上是关于如何从 FirebaseAuth 获取 ID 令牌的主要内容,如果未能解决你的问题,请参考以下文章