我目前正在我的aws服务器中运行python代码并尝试连接到我朋友的firebase数据库。我阅读了firebase提供的文档以连接到aws服务器。
我已经完成了每一步,但是当我尝试连接到服务器时出现错误。我已将google-service.json添加为凭据。 我得到的错误:
ValueError:无效的服务帐户证书。证书必须 包含“type”字段设置为“service_account”。
我是否需要修改 google-services.json ?
我的代码:
import firebase_admin
from firebase_admin import credentials
cred = credentials.Certificate('/home/ec2-user/google-services.json')
#default_app = firebase_admin.initialize_app(cred)
other_app = firebase_admin.initialize_app(cred, name='other')
ault_app = firebase_admin.initialize_app()
答案 0 :(得分:3)
google-services.json通常是Android应用配置文件的名称。这与服务帐户不同。要获取项目服务帐户的凭据,您需要从项目设置中生成一个Firebase控制台 - >服务帐户。文档是here。获得此文件后,您可以使用它初始化Admin SDK以开始访问项目中的数据。
答案 1 :(得分:1)
更好的方法是将凭据存储在s3(已加密)上,并将IAM角色附加到lambda函数。
import os
import firebase_admin
from firebase_admin import credentials
import boto3
from settings.local_settings import AWS_REGION, ENVIRONMENT
import json
firebase_config_file = 'app-admin-config-{}.json'.format(ENVIRONMENT)
firebase_admin_creds_file = 'app-admin-sdk-{}.json'.format(ENVIRONMENT)
current_dir = os.path.abspath(os.path.dirname(__file__))
files = [f for f in os.listdir(current_dir) if os.path.isfile(f)]
if firebase_config_file not in files and firebase_admin_creds_file not in files:
s3 = boto3.resource('s3', region_name=AWS_REGION)
bucket = s3.Bucket('app-s3-secrets')
firebase_config = json.loads(
bucket.Object('app-admin-config-{}.json'.format(ENVIRONMENT)).get()['Body'].read())
firebase_admin_creds = json.loads(
bucket.Object('app-admin-sdk-{}.json'.format(ENVIRONMENT)).get()['Body'].read().decode())
class Firebase:
@staticmethod
def get_connection():
cred = credentials.Certificate(firebase_admin_creds)
return firebase_admin.initialize_app(cred, firebase_config)
app = Firebase.get_connection()