簡體   English   中英

Firebase FCM sendAll() 私鑰錯誤:error:0909006C:PEMroutines:get_name:no start line

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM