【问题标题】:How to use the getIdToken() auth method in firebase version 9?如何在 firebase 版本 9 中使用 getIdToken() 身份验证方法?
【发布时间】:2021-12-26 22:07:06
【问题描述】:

如何在firebase 9 中使用getIdToken() auth 方法?

它在版本 8 中如下所示

import firebase from "firebase";

const token = await firebase.auth().currentUser.getIdToken(/* forceRefresh */ false);

我在第 9 版中尝试过,但无法正常工作

import { getIdToken } from "firebase/auth";

const token = await getIdToken(/* forceRefresh */ false);

我也在下面尝试过,但它不起作用

import { getAuth } from "firebase/auth";

const auth = getAuth();
const { currentUser } = auth;

const token = await currentUser.getIdToken(/* forceRefresh */ false);

【问题讨论】:

  • getIdToken 仍然是 v9 中 User 对象上的一个方法,如此处所示 firebase.google.com/docs/reference/js/…。您问题中的最后一个代码 sn-p 有什么问题?你在调试器中单步执行了吗? currentUser 有值吗? currentUser.uid 有值吗?
  • 是的 currentUser 确实有一个价值,如何建议我在 v9 中使用 getIdToken 方法? @FrankvanPuffelen
  • 和以前一样,那么当你在最后一个 sn-p 中运行最后一行时会发生什么?
  • 得到这个错误[Unhandled promise rejection: TypeError: null is not an object (evaluating 'currentUser.getIdToken')]@FrankvanPuffelen
  • 听起来currentUsernull。如果你在调用 ID 令牌之前执行if (currentUser === null) throw "No current user",那应该很容易测试。

标签: javascript firebase react-native firebase-authentication


【解决方案1】:

getIdToken() 函数将 User 作为参数,而不是像名称空间 SDK 中的 refreshToken 布尔值。

import { getIdToken, onAuthStateChanged } from "firebase/auth";

onAuthStateChanged(auth, async (user) => {
  if (user) {
    const token = await getIdToken(user);
  }
});

就错误而言,getAuth() 返回身份验证实例,但用户的身份验证状态现在可能已经加载。尝试在onAuthStateChanged 中运行相同的操作,或者按照@Frank 的建议添加一个空检查。

【讨论】:

    【解决方案2】:

    看起来getIdToken() 函数在最新版本(9.6.6)中有两个参数:用户和布尔值。所以,这是我的工作代码:

    import { getAuth, getIdToken } from "firebase/auth"
    
    const auth = getAuth()
    const { currentUser } = auth
    const token = await getIdToken(currentUser, true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2020-10-15
      相关资源
      最近更新 更多