使用来自 firebase/auth 的 getAuth 的 Auth 类型中不存在 verifyIdToken 方法

verifyIdToken method doesn't exist in Auth type using getAuth from firebase/auth

我正在尝试按照给定的示例进行操作 here,其中显示了以下示例来验证 ID 令牌:

// idToken comes from the client app
getAuth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((error) => {
    // Handle error
  });

我的代码如下所示:

function createFirebaseAdminApp(config: AppOptions) {
    if (getApps().length === 0) {
        return initializeApp(config);
    } else {
        return getApp();
    }
}

const options: AppOptions  = {
    credential: cert({
        projectId: process.env.FIREBASE_PROJECT_ID,
        clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
        privateKey:
            process.env.FIREBASE_PRIVATE_KEY != undefined
                ? process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, "\n")
                : "",
    }),
    databaseURL: process.env.FIREBASE_DATABASE_URL,
};


const firebaseAdmin = createFirebaseAdminApp(options) as FirebaseApp;
const adminAuth = getAuth(firebaseAdmin);
adminAuth
    .verifyIdToken(token)
    .then((decodedToken) => {
        res.locals.decodedToken = decodedToken;
        next();
    })
            .catch(() => {
                next(new HttpError("Invalid token provided", 403));
            });

但我不断得到

Property 'verifyIdToken' does not exist on type 'Auth'

我有最新版本的 firebase 包,考虑到它使用 getAuth,我假设文档给出的示例正在使用它,所以无法判断我做错了什么。此外,我试图避免混合使用 firebase-admin 和 firebase,不确定这是否正确,但如果我混合使用它们,我似乎无法避免也必须初始化 App 实例。

感谢您的帮助!

您混淆了管理 SDK 和客户端 SDK。

您链接的文档仅适用于 Admin SDK。请注意它在管理部分中的组织方式。它没有在该页面的任何地方使用 getAuth。 Admin SDK 的初始化方式与客户端 SDK 完全不同,它在浏览器中根本不起作用。它仅在安全后端运行。

您使用的客户端SDK没有验证令牌的功能。那是仅使用 Adminn SDK 的安全后端。