如何从 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?