如何解决使用 firebase-admin 在 Google Cloud 环境之外对服务帐号进行身份验证
我在 Vercel 上托管的 Next.js 应用程序中作为服务帐户进行身份验证时遇到问题。我的代码在我的开发环境中运行良好,但是当我尝试在 Vercel Node.js v14 环境中运行它时失败并显示以下错误消息。我猜它在我的本地机器上运行,因为我使用我的电子邮件(项目所有者)登录 gcloud
。
这是我得到的错误:
错误:无法加载默认凭据。浏览到 https://cloud.google.com/docs/authentication/getting-started 了解更多信息。
在 GoogleAuth.getApplicationDefaultAsync (/var/task/node_modules/google-auth-library/build/src/auth/googleauth.js:173:19) 在 processticksAndRejections (internal/process/task_queues.js:97:5)
在异步 GoogleAuth.getClient (/var/task/node_modules/google-auth-library/build/src/auth/googleauth.js:551:17)
在异步 Grpcclient._getCredentials (/var/task/node_modules/google-gax/build/src/grpc.js:109:24)
在异步 Grpcclient.createStub (/var/task/node_modules/google-gax/build/src/grpc.js:252:23)
我创建了以下服务帐户以将其与我的 Next.js API 一起使用。
它具有所有必要的角色。我已经创建了一个 JSON 密钥并下载了它。
我正在使用 firebase-admin
,这是我初始化它的方式:
export const initializefirebaseAdmin = (): FirebaseAdmin => {
const account = getServiceAccount(); // THIS IS THE SERVICE ACCOUNT JSON KEY (ALREADY PARSED AS AN OBJECT)
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert(account),});
}
return admin;
};
这就是我认为正在发生的事情:
来自:https://cloud.google.com/docs/authentication/production#automatically
- 从上图:
- 我没有设置任何
GOOGLE_APPLICATION_CREDENTIALS
环境变量 - 所以我应该排在第 2 位。它会“尝试使用附加到正在运行您的代码的资源的服务帐户。”
- 它显然失败了,我收到了错误
但是它指的是哪个资源?哪个代码?
运行我的代码的资源是 Firebase Admin?我没有正确初始化它吗?
解决方法
此代码应该可以验证 firebase-admin
包:
export const initializeFirebaseAdmin = (): FirebaseAdmin => {
const account = getServiceAccount(); // THIS IS THE SERVICE ACCOUNT JSON KEY (ALREADY PARSED AS AN OBJECT)
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert(account),});
}
return admin;
};
我的问题与我使用从 firebase-admin
包公开的客户端有关,该客户端无法访问主包的身份验证。所以我也需要将凭据传递给它。喜欢:
const client = new admin.firestore.v1.FirestoreAdminClient({
credentials: SERVICE_ACCOUNT as CredentialBody // <<<<<< THIS IS THE SERVICE ACCOUNT JSON KEY
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。