firebase 错误:16未验证:检索授权元数据失败,出现错误:无法刷新访问令牌

7dl7o3gd  于 2023-05-07  发布在  其他
关注(0)|答案(6)|浏览(414)

完整的错误如下:

Unhandled error Error: 16 UNAUTHENTICATED: Failed to retrieve auth metadata with error: Could not refresh access token: Unsuccessful response status code. Request failed with status code 500
at Object.callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:327:49)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:299:181)
at /workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:145:78
at processTicksAndRejections (internal/process/task_queues.js:79:11)
Caused by: Error
at Query._get (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1449:23)
at Query.get (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1438:21)
at Object.getTeacherDataWithFilters (/workspace/lib/teachers/methods.js:168:81)
at /workspace/lib/teachers/callable.js:22:36
at func (/workspace/node_modules/firebase-functions/lib/providers/https.js:273:32)
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
code: 16,
details: 'Failed to retrieve auth metadata with error: Could not refresh access token: Unsuccessful response status code. Request failed with status code 500',
metadata: Metadata { internalRepr: Map {}, options: {} }

我最近部署到firebase函数,现在我得到这个错误。我不知道发生了什么,我找不到任何具体的事情

xiozqbni

xiozqbni1#

我遇到了同样的错误,这是由于凭据的身份验证问题。下面的命令帮我修好了。

gcloud auth application-default login

运行此命令后,我得到以下输出。
凭证已保存到文件:[/Users/username/.config/gcloud/application_default_credentials.json]。这些凭据将由请求应用程序默认凭据(ADC)的任何库使用。
Official Document for Reference

7ajki6be

7ajki6be2#

我已经找到了真正的原因,这就是为什么我回答我自己的问题。我得到这个错误的原因是附加到这个项目的默认服务帐户,主要是像<project-ID>@appspot.gserviceaccount.com禁用。启用后,一切正常。

plicqrtu

plicqrtu3#

1.尝试以UTF-8保存.env文件
1.什么对我起作用:process.env.TOKEN.replace(/\n/gm,'\n')

gk7wooem

gk7wooem4#

如果有人在Vercel上部署,在设置PRIVATE_KEY env变量时需要做一个小的更改。您需要从key中删除开始和结束双引号。保存如下:

-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgk
.
.
.
4xxjFxhpK5GLYmGSZzpv5Y=\n-----END PRIVATE KEY-----\n
p5fdfcr1

p5fdfcr15#

如果它在您的本地环境中工作正常,但在任何生产构建中出现故障,这里有一个很好的黑客可以在任何平台中对其进行排序:
此外,这在Vercel中的工作原理就像一个魅力(请注意,在Vercel中添加环境变量时,您不能放置任何引用并直接粘贴它,如:{"privateKey":"XXX...."}

//.env.local File:
FB_ADMIN_PRIVATE_KEY='{"privateKey":"XXX...."}'

您的配置:

import admin from 'firebase-admin';

const keyString = process.env.FB_ADMIN_PRIVATE_KEY ?? '{"privateKey": ""}'; //Since it's a TypeScript so need to ensure that I pass a valid string to the JSON.parse as FB_ADMIN_PRIVATE_KEY can be undefined

const { privateKey } = JSON.parse(keyString);

if (privateKey === '') {
  //In case you want to confirm things in Server Logs
  console.log('FIREBASE_PRIVATE_KEY is not set');
}

admin.initializeApp({
  credential: admin.credential.cert({
    clientEmail: process.env.FB_ADMIN_CLIENT_EMAIL,
    privateKey: privateKey,
    projectId: process.env.FB_ADMIN_PROJECT_ID,
  }),
});

const db = admin.firestore();
const auth = admin.auth();

export { auth, db };
ekqde3dh

ekqde3dh6#

另一种情况是,如果你有一个使用google apis的app engine应用,那么在gcp中,你删除并重新创建(自定义或默认)服务帐户(例如,可能使用terraform)。
在您重新部署应用程序之前,它不会进行身份验证。

相关问题