使用来自 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 的安全后端。
我正在尝试按照给定的示例进行操作 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 的安全后端。