![](/img/trans.png)
[英]error:0909006C:PEM routines:get_name:no start line - for google cloud platform in heroku
[英]Firebase FCM sendAll() private key error: error:0909006C:PEM routines:get_name:no start line
此錯誤消息基於其在 SO 中的頻繁出現似乎是對許多錯誤的一般響應。 我正在嘗試從 Nestjs 微服務后端執行 FCM sendAll(...) 。 我在 main.ts 中初始化了 firebase,如下所示:
.......
......
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.TCP,
options,
}
);
const configService: ConfigService = app.get(ConfigService);
const adminConfig: ServiceAccount = {
"projectId": configService.get<string>('FIREBASE_PROJECT_ID'),
"privateKey": configService.get<string>('FIREBASE_PRIVATE_KEY')
.replace(/\\n/g, '\n'),
"clientEmail": configService.get<string>('FIREBASE_CLIENT_EMAIL'),
};
firebase.initializeApp({
credential: firebase.credential.cert(adminConfig),
});
await app.listen();
}
bootstrap();
My.ENV 是這樣的:
FIREBASE_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----\nMI...\n-----END PRIVATE KEY-----\n",
FIREBASE_CLIENT_EMAIL = 'abc@my.com',
FIREBASE_PROJECT_ID = 'xxx-genysis'
顯然 firebase 已初始化並且憑據正常。 如果我替換無效憑據,我會收到錯誤消息。
但是,當我嘗試在我的 notification.service.ts 中執行 sendAll(...) 時,如下所示:
import * as firebase from 'firebase-admin';
......
.....
async sendNotifications(data) {
const messages = await this.getMessages(data.tokens,data.message,data.title);
const promises = [];
for (let i = 0; i + 10 <= messages.length; i += 10) {
const batch = messages.slice(i, i + 10);
promises.push(firebase.messaging().sendAll(batch));
}
await Promise.all(promises);
}
我收到以下錯誤:
error:0909006C:PEM routines:get_name:no start line
Error: error:0909006C:PEM routines:get_name:no start line
at Sign.sign (node:internal/crypto/sig:131:29)
at Object.sign (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/jsonwebtoken/node_modules/jwa/index.js:152:45)
at Object.jwsSign [as sign] (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/jsonwebtoken/node_modules/jws/lib/sign-stream.js:32:24)
at Object.module.exports [as sign] (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/jsonwebtoken/sign.js:204:16)
at ServiceAccountCredential.createAuthJwt_ (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/app/credential-internal.js:105:20)
at ServiceAccountCredential.getAccessToken (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/app/credential-internal.js:77:28)
at FirebaseAppInternals.refreshToken (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/app/firebase-app.js:45:49)
at FirebaseAppInternals.getToken (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/app/firebase-app.js:37:25)
at AuthorizedHttpClient.getToken (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/utils/api-request.js:612:34)
at AuthorizedHttpClient.send (/Applications/GenysisBuild/GenysisNest/genysis-notifications/node_modules/firebase-admin/lib/utils/api-request.js:600:21)
根據對錯誤消息的響應,我似乎有一個錯誤的 private_key,但事實並非如此,因為相同的私鑰用於初始化 firebase。 任何人都可以闡明這里發生了什么嗎?
編輯: sendAll() 周圍的 try/catch 錯誤會導致以下錯誤:
{"library":"PEM routines","function":"get_name","reason":"no start line","code":"ERR_OSSL_PEM_NO_START_LINE"}
Firebase 錯誤消息與您的錯誤原因相去甚遠,導致像我這樣的帖子不斷彈出。
長話短說。 使用以下內容讓我克服了困難:在 my.env
GOOGLE_APPLICATION_CREDENTIALS=/path/project-key.json
顯然,文檔中的其他建議僅在特定條件下有效。 直接使用 PRIVATE_KEY 並不適用於所有場合,GOOGLE_APPLICATION_CREDENTIALS 是保留名稱...您必須使用此名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.