Firebase 导入服务引发错误



我正在使用 firebase 函数,我想将带有服务帐号密钥 json 的应用程序初始化为凭据,但出现错误

类型

为"{ "类型"的参数:字符串;"project_id":字符串;"private_key_id":字符串;"private_key":字符串;"client_..."不能分配给类型为"字符串 |服务帐户"。 键入 '{ "类型":字符串;"project_id":字符串;"private_key_id":字符串;"private_key":字符串;"client_..."与类型"服务帐户"没有共同的属性。

我的索引.ts 文件

import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import {serviceAccount} from './serviceAccount'
console.log(functions.config())
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL:functions.config().firebase
});
export const firestore = admin.firestore();
export const firebase = admin.database();

serviceAccount.ts

export const serviceAccount = {
"type": "service_account",
"project_id": "lxxxxxx",
"private_key_id": "xxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----xxxxxxx---END PRIVATE KEY-----n",
"client_email": "firebase-axxxxx-9b58b.iaxxxceaccount.com",
"client_id": "xxxxx",
"auth_uri": "https://accounts.google.com/o/xxxxx",
"token_uri": "https://accounts.google.com/o/oxxxxn",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"clixxxxxx": "https://www.googleapis.com/robot/v1/metadataxxxxirebase-adminsdk-uxxxxxxrviceaccount.com"

}

此行代码中的错误

credential: admin.credential.cert(serviceAccount),

我也经历过。解决方案是将类型ServiceAccount,并将从该 json 文件导入的整个对象强制转换为该类型。

import firebase from 'firebase' 
import * as firebaseAdmin from 'firebase-admin' 
import firebaseConfig from '../firebaseConfig.json' 
import firebaseAccountCredentials from '../serviceAccountCredentials.json'
const serviceAccount = firebaseAccountCredentials as admin.ServiceAccount
firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(serviceAccount),
databaseURL: firebaseConfig.databaseURL 
});

我遇到了这样的问题。
尝试转换为 JSON 并返回。
喜欢这个:

admin.initializeApp({
credential: admin.credential.cert(JSON.parse(JSON.stringify(serviceAccount))),
databaseURL: functions.config().firebase
});

我对 TypeScript 不是很有经验,但我认为这将作为一个临时解决方案,直到有人提出更好的解决方案。

let regularObj = {};
Object.assign(regularObj, serviceAccount);
admin.initializeApp({
credential: admin.credential.cert(regularObj),
databaseURL: functions.config().firebase
});

我有一个非常简单的方法,你只需要给导入一个类型。在我的情况下反对。

import * as serviceAccount  from './service-account.json';
const credentialObject:object = serviceAccount;

就我而言,我需要添加"assert { type: "json" }"来导入凭据而没有错误。喜欢这个:

import serviceAccount from "./service-account.json" assert { type: "json" };
const params = {
type: serviceAccount.type,
projectId: serviceAccount.project_id,
privateKeyId: serviceAccount.private_key_id,
privateKey: serviceAccount.private_key,
clientEmail: serviceAccount.client_email,
clientId: serviceAccount.client_id,
authUri: serviceAccount.auth_uri,
tokenUri: serviceAccount.token_uri,
authProviderX509CertUrl: serviceAccount.auth_provider_x509_cert_url,
clientC509CertUrl: serviceAccount.client_x509_cert_url
}
initializeApp({ credential: cert(params)});

最新更新