如何从 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 令牌的主要内容,如果未能解决你的问题,请参考以下文章

我们可以从 FirebaseAuth 获取 FacebookAccessToken 吗?

如何从 Firebase.auth.currentUser Android Kotlin 获取刷新令牌

如何在 Flutter 中从 Firebase Auth 获取用户 ID?

如何从 JWT 令牌中获取用户 ID

如何从 Laravel Passport 中的刷新令牌中获取 id?

如何从 jwt 令牌中获取用户 ID?