firebase 导入服务抛出错误
Posted
技术标签:
【中文标题】firebase 导入服务抛出错误【英文标题】:firebase import service throws error 【发布时间】:2018-10-20 16:20:49 【问题描述】:我正在使用 firebase 函数,我想使用服务帐户密钥 json 将 App 初始化为凭据,但我收到了错误
类型参数 ' "type": string; “project_id”:字符串; “private_key_id”:字符串; “private_key”:字符串; “client_...”不能分配给“string | ServiceAccount”类型的参数。 类型'“类型”:字符串; “project_id”:字符串; “private_key_id”:字符串; “private_key”:字符串; “client_...”与“ServiceAccount”类型没有共同的属性。
我的 index.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),
【问题讨论】:
【参考方案1】:我也经历过。解决方案是引入类型 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
);
【讨论】:
我更喜欢语法credential: admin.credential.cert( <ServiceAccount>serviceAccount ),
用 = 声明变量然后也用作语法时调用的语法是什么?这对我不起作用,“as”会抛出意外的标识符【参考方案2】:
我对 TypeScript 不是很有经验,但我认为这将作为一种临时解决方案,直到有人提出更好的解决方案。
let regularObj = ;
Object.assign(regularObj, serviceAccount);
admin.initializeApp(
credential: admin.credential.cert(regularObj),
databaseURL: functions.config().firebase
);
【讨论】:
非常适合字符串内容。 JSON.parse(fileContent); //先把字符串转成JSON Object 谢谢。【参考方案3】:我遇到过这样的问题。 尝试转换为 JSON 并返回。 像这样:
admin.initializeApp(
credential: admin.credential.cert(JSON.parse(JSON.stringify(serviceAccount))),
databaseURL: functions.config().firebase
);
【讨论】:
【参考方案4】:我有一个非常简单的方法,你只需给那个导入一个类型。在我的情况下对象。
import * as serviceAccount from './service-account.json';
const credentialObject:object = serviceAccount;
【讨论】:
以上是关于firebase 导入服务抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 Firebase 9.0 导入错误? “尝试导入错误:‘firebase/app’不包含默认导出(导入为‘firebase’)。”
尝试导入错误:“initializeApp”未从“firebase”导出(导入为“firebase”)[关闭]
尝试导入错误:“app”未从“firebase/app”导出(导入为“firebase”)