App.jsファイルで.env
変数を使用してキーにアクセスします。新しいFirebase Service Account Private Key
をダウンロードするまで、すべてが問題なく動作していました。古い値を新しい値に置き換えると、キーにアクセスできなくなります。terminal
でnode app.js
を実行すると、エラーメッセージが表示され続けるためです。
/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129 throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL、 '秘密鍵の解析に失敗しました:' +エラー); ^
エラー:秘密鍵の解析に失敗しました:エラー:無効なPEM形式のメッセージ。 at FirebaseAppError.FirebaseError [コンストラクタとして](/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:39:28)at FirebaseAppError.PrefixedFirebaseError [コンストラクタとして](/ Users/Cpu/Desktop /...../ node_modules/firebase-admin/lib/utils/error.js:85:28)at new FirebaseAppError(/Users/Cpu/Desktop/...../node_modules/firebase -admin/lib/utils/error.js:119:28)新しい証明書(/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129:19)新しいCertCredential(/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:192:64)at Object.cert(/ Users/Cpu/Desktop/... ..)Objectで。 (/Users/Cpu/Desktop/...../app.js:14:32)at Module._compile(module.js:571:32)at Object.Module._extensions..js(module.js:580 :10)at Module.load(module.js:488:32)at FirebaseAppError.FirebaseError [コンストラクタとして] npm ERR!コードELIFECYCLE npm ERR!エラー番号1
私が行ったのは、新しいPrivate Key
をc + pしてから追加し、.env
ファイルを保存してherokuにプッシュしただけですが、機能していません。新しいPrivate Key
もダウンロードしましたが、同じ問題が発生します。
新旧の秘密鍵
// old Private Key
-----BEGIN PRIVATE KEY-----\nbbbbbbbb\n-----END PRIVATE KEY-----\n
// new Private Key
-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
.envファイル:
FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
App.jsファイル:
const dotenv = require('dotenv');
dotenv.load();
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY // I get error HERE
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
この問題を解決するにはどうすればよいですか?
問題は、_.env
_ファイル内でdotenv
変数を使用したため、_FIREBASE_PRIVATE_KEY
_にエスケープ文字が含まれていました:_\n
_の内部。
私は この答え に従い、それを解析するためにその末尾に.replace(/\\n/g, '\n')
を追加する必要がありました:
_privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
_
したがって、コードは次のようになります。
_admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n') // NOW THIS WORKS!!!
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
_
dotenv
のドキュメントに従って、拡張された改行オプションを許可するには、キーを二重qoutesに追加する必要があります。
このオプションは、dotenv
githubの[Rules]セクションで確認できます。
https://github.com/motdotla/dotenv#rules
FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n"